【编程测试题】阿里巴巴2019年提前批编程题

阿里巴巴(菜鸟) - 算法工程师(机器学习)提前批笔试面试总结 前面一直在准备出国留学申请,中间投递了华为、腾讯、阿里三家公司。幸运的是拿到了华为多媒体算法岗, 腾讯机器学习算法岗,阿里巴巴菜鸟物流算法岗。接下来将投入到论文发表、计算机名校申请中。 Attention1:本文是博主准备阿里秋招的笔记内容。 Attention2:本文只为了记录自己的经历,不适用金字塔层级的大神、大佬。 1.申请职位描述 阿里巴巴-菜鸟物流:算法工程师(机器学习) 其... 阅读详情

光明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么? 
光明小学可以抽象成一张有N个节点的图,每两点间都有一条道路相连。光明小学的每个班都有M个学生,所以你要为他们设计出一条恰好经过M条边的路径。 
光明小学的小朋友们希望全盘考虑所有的因素,所以你需要把任意两点间经过M条边的最短路径的距离输出出来以供参考。* 
你需要设计这样一个函数: 
res[][] Solve( N, M, map[][]); 
注意:map必然是N * N的二维数组,且map[i][j] == map[j][i],map[i][i] == 0,-1e8 <= map[i][j] <= 1e8。(道路全部是无向边,无自环)2 <= N <= 100, 2 <= M <= 1e6。要求时间复杂度控制在O(N^3*log(M))。 
map数组表示了一张稠密图,其中任意两个不同节点i,j间都有一条边,边的长度为map[i][j]。N表示其中的节点数。 
你要返回的数组也必然是一个N * N的二维数组,表示从i出发走到j,经过M条边的最短路径 
你的路径中应考虑包含重复边的情况。 
这个题目要求在30分钟内解决,臣妾做不到的说。先来看看题目解析。 
题目解析:该题目要求在M次选择中,计算出i与j之间距离最短的值,是一种动态规划题型,因此我们用动态规划方式解答(C++):



#include <iostream>
using namespace std;
void Solve(int N,int M,int** map,int** res)
{
    for(int i=0;i<N;i++)
    {
        int **E=new int*[N];
        for(int j=0;j<N;j++)
            E[j]=new int[M];     //建立存放动态结果的矩阵  
        for(j=0;j<N;j++)
            if(i!=j)
                E[j][0]=map[i][j];
            else
                E[j][0]=100000000;
        for(int k=1;k<M;k++)
            for(j=0;j<N;j++)
                E[j][k]=100000000;
        for(k=1;k<M;k++)
        {
            for(j=0;j<N;j++)
            {
                for(int u=0;u<N;u++)
                {
                    if(u!=j)
                    {   
                        if(E[j][k]>E[u][k-1]+map[u][j])
                            E[j][k]=E[u][k-1]+map[u][j];
                    }
                }
            }
        }
        for(j=0;j<N;j++)
            res[i][j]=E[j][M-1];
    }
};
int main()
{
    int N,M;   //输入N个结点,M个路径
    //建立二维地图
    int i,j;
    cout<<"请输入结点数N,路径数M和地图Map:";
    cin>>N;
    cin>>M;
    int **map=new int*[N];
    int **res=new int*[N];
    for(i=0;i<N;i++)
    {
        map[i]=new int[N];
        res[i]=new int[N];
    }
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            cin>>map[i][j];
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            res[i][j]=100000000;
    Solve(N,M,map,res);
    for(i=0;i<N;i++)
    {       
        for(int j=0;j<N;j++)
            cout<<res[i][j]<<"  ";
        cout<<endl;
    }

    for(i=0;i<N;i++)
        delete[] res[i];
    delete[] res;
    return 0;
}

以上是动态规划过程,我们从中可以看一下for嵌套的个数,可以发现,该算法的复杂度为O(N^3*M),与要求的不符合,如何做到时间复杂度为O(N^3logM)呢? 
我们观察到,我们求取步骤中,其实做了很多的无用功,比如我有4个小朋友,我要求得4段距离总和最小,如果用上面的程序,先求得2段距离最小,然后3段,然后4段,其实在后面基本上都是在原本地图矩阵上查找,地图矩阵i与j之间的距离是1段的距离,当我们计算出2段距离最小时,其实可以将该矩阵作为新的地图,即i与j之间是2段的距离,以此类推,我可以通过4段距离最小矩阵求得8段距离矩阵。此时我们需要用到递归,程序如下:

void Solve(int N,int M,int** map,int** res)
{
    int i,j,k;
    int a=M/2;
    int b=M-a*2;

    int **E=new int*[N];
    for(i=0;i<N;i++)
        E[i]=new int[N];
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            E[i][j]=100000000;

    if(a==1)
    {
        for(i=0;i<N;i++)
            for(j=0;j<N;j++)
                for(k=0;k<N;k++)
                    if(i!=k&&j!=k&&res[i][j]>map[i][k]+map[k][j])
                        res[i][j]=map[i][k]+map[k][j];
        if(1==b)
        {
            for(i=0;i<N;i++)
                for(j=0;j<N;j++)
                    for(k=0;k<N;k++)
                        if(j!=k&&E[i][j]>res[i][k]+map[k][j])
                            E[i][j]=map[k][j]+res[i][k];
            for(i=0;i<N;i++)
                for(j=0;j<N;j++)
                    res[i][j]=E[i][j];
        }
        for(i=0;i<N;i++)
            delete[] E[i];
        delete[] E;
        return;
    }
    Solve(N,a,map,res);
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            for(k=0;k<N;k++)
                if(E[i][j]>res[i][k]+res[k][j])
                    E[i][j]=res[i][k]+res[k][j];
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
        {
            res[i][j]=E[i][j];
            E[i][j]=100000000;
        }

    if(b==1)
    {
        for(i=0;i<N;i++)
            for(j=0;j<N;j++)
                for(k=0;k<N;k++)
                    if(j!=k&&E[i][j]>res[i][k]+map[k][j])
                        E[i][j]=res[i][k]+map[k][j];
        for(i=0;i<N;i++)
            for(j=0;j<N;j++)
                res[i][j]=E[i][j];
    }
    for(i=0;i<N;i++)
        delete[] E[i];
    delete[] E;
}

int main()
{
    int N,M;   //输入N个结点,M个路径
    //建立二维地图
    int i,j;
    cout<<"请输入结点数N,路径数M和地图Map:";
    cin>>N;
    cin>>M;
    int **map=new int*[N];
    int **res=new int*[N];
    for(i=0;i<N;i++)
    {
        map[i]=new int[N];
        res[i]=new int[N];
    }
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            cin>>map[i][j];
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            res[i][j]=100000000;
    Solve(N,M,map,res);
    for(i=0;i<N;i++)
    {       
        for(int j=0;j<N;j++)
            cout<<res[i][j]<<"  ";
        cout<<endl;
    }

    for(i=0;i<N;i++)
        delete[] res[i];
    delete[] res;
    return 0;
}

我们在每一层递归中,都传入了地图信息,是因为小朋友数M的个数不一定是2的n次方,若无法整除2,那么就需要地图map的帮助啦,此算法的复杂度可以保证在O(N^3*logM).

有什么问题的话,欢迎留言讨论。 
本文为原创文章,欢迎转载,转载请注明出处!

原文地址: https://blog.youkuaiyun.com/jiulexiaoyao/article/details/81228934

 



//复杂度N^3 * logM

void Solve(int N, int M, vector<vector<int>> &map, vector<vector<int>> &R)
{
	//动态规划
	int i, j, k;
	int a = M / 2;
	int b = M - a * 2;

	vector<int> T(N, (int)1e6);
	vector<vector<int>> E(N, T);	//动态中间结果

	if (a == 1)
	{
		for (i = 0; i < N; i++)
			for (j = 0; j < N; j++)
				for (k = 0; k < N; k++)
					if (i != k&&j != k&&R[i][j] > map[i][k] + map[k][j])
						R[i][j] = map[i][k] + map[k][j];
		if (1 == b)
		{
			for (i = 0; i < N; i++)
				for (j = 0; j < N; j++)
					for (k = 0; k < N; k++)
						if (j != k&&E[i][j] > R[i][k] + map[k][j])
							E[i][j] = map[k][j] + R[i][k];

			for (i = 0; i < N; i++)
				for (j = 0; j < N; j++)
					R[i][j] = E[i][j];
		}
		return;
	}

	Solve(N, a, map, R);

	for (i = 0; i < N; i++)
		for (j = 0; j < N; j++)
			for (k = 0; k < N; k++)
				if (E[i][j] > R[i][k] + R[k][j])
					E[i][j] = R[i][k] + R[k][j];

	for (i = 0; i < N; i++)
		for (j = 0; j < N; j++)
		{
			R[i][j] = E[i][j];
			E[i][j] = (int)1e6;
		}

	if (b == 1)
	{
		for (i = 0; i < N; i++)
			for (j = 0; j < N; j++)
				for (k = 0; k < N; k++)
					if (j != k&&E[i][j] > R[i][k] + map[k][j])
						E[i][j] = R[i][k] + map[k][j];

		for (i = 0; i < N; i++)
			for (j = 0; j < N; j++)
				R[i][j] = E[i][j];
	}
}

int main()
{
	int N = 3;	//N个结点
	int M = 6;  //M个路径
	//cin >> N;
	//cin >> M;

	int i, j;	
	vector<int> T(N, 0);
	vector<vector<int>> map(N, T);	//建立二维地图
	vector<vector<int>> R(N, T);	//建立二维表

	//输入数据
	int Temp[9] = {0,2,3,2,0,1,3,1,0};

	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
		{
			R[i][j] = (int)1e6;
			//cin >> map[i][j];
			map[i][j] = Temp[i * 3 + j];
		}
	}

	//求解
	Solve(N, M, map, R);

	//打印
	for (i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			cout << R[i][j] << "  ";
		}
		cout << endl;
	}
	return 0;
}

//复杂度N^3 * M

#include <iostream>
using namespace std;
void Solve(int N, int M, vector<vector<int>>& map, vector<vector<int>>& res)
{

	for (int i = 0; i < N; i++)
	{
		vector<int> T(M, (int)1e6);
		vector<vector<int>> E(N, T);	//动态中间结果

		for (int j = 0; j < N; j++)
			if (i != j)
				E[j][0] = map[i][j];
			else
				E[j][0] = 100000000;
		for (int k = 1; k < M; k++)
			for (int j = 0; j < N; j++)
				E[j][k] = 100000000;
		for (int k = 1; k < M; k++)
		{
			for (int j = 0; j < N; j++)
			{
				for (int u = 0; u < N; u++)
				{
					if (u != j)
					{
						if (E[j][k] > E[u][k - 1] + map[u][j])
							E[j][k] = E[u][k - 1] + map[u][j];
					}
				}
			}
		}
		for (int j = 0; j < N; j++)
			res[i][j] = E[j][M - 1];
	}
};
int main()
{
	int N = 3;
	int M = 2;   //输入N个结点,M个路径
				//建立二维地图

	int i, j;	
	vector<int> T(N, 0);
	vector<vector<int>> map(N, T);	//建立二维地图
	vector<vector<int>> R(N, T);	//建立二维表

	//输入数据
	int Temp[9] = {0,2,3,2,0,1,3,1,0};

	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
		{
			R[i][j] = (int)1e6;
			//cin >> map[i][j];
			map[i][j] = Temp[i * 3 + j];
		}
	}


	Solve(N, M, map, R);
	for (i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
			cout << R[i][j] << "  ";
		cout << endl;
	}

	return 0;
}

有问题可以留言!

DB文件在编程中的作用及示例代码 通过使用DB文件,我们可以实现数据的持久化存储,并能够高效地进行数据的增删改查操作。在本文中,我们以SQLite数据库为例,演示了如何使用Python语言创建和操作DB文件的示例代码。在实际的编程中,我们可以根据具体的需求和使用的数据库系统来进行更复杂的操作和优化。通过使用DB文件,我们可以实现数据的持久化存储,确保数据在程序关闭后也能被保留,并且能够高效地进行数据检索和更新。在本文中,我们将探讨DB文件的作用,并提供一些示例代码展示如何在编程中使用DB文件。上述代码中,我们使用SQLite提供的。 阅读详情

相关推荐

ipc$漏洞攻击(实验)

我们总在说ipc$漏洞ipc$漏洞,其实,ipc$并不是真正意义上的漏洞,它是为了方便管理员的远程管理而开放的远程网络登陆功能,而且还打开了默认共享,即所有的逻辑盘(c$,d$,e$……利用IPC$,连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码(当然,对方机器必须开了ipc$共享,否则你是连接不上的),而利用这个空的连接,连接者还可以得到目标主机上的用户列表(不过负责的管理员会禁止导出用户列表的)。5.然后,我们物理连接到靶机上,到了两分钟后,我们可以用命令看到,这个pp45的用户就出现了。

2301_76361674的博客 3254

阿里巴巴面试流程

文章目录1)招聘流程线上测评/笔试面试Offer入职2)线上测评(答题期间不允许切屏,否则视为作弊)2.1) 10道阅读题,考察你的审题分析能力(10分钟,每道题45s-90s不等)2.2) 10道计算题,考察你的审题和简单计算(10分钟,每道题45s-90s不等)2.3)10道看图题,考察你的观察和规律总结能力。(10分钟,每道题45s-90s不等)2.4) 98道心理测试题,单纯的测试个人性格...

weixin_43490369的博客 2324

【数据集】中国各类水文专业常用数据集合集

对中国各类水文专业常用数据集进行整理并总结

WW、forever的博客 9299

阿里面试其实也没想象中的那么难,秋招提前批4面拿到21K

大概早上9点左右,收到了阿里面试官小姐姐的电话,声音很好听...跟她约了晚上9点的电话面..然后一整天上班不在状态,开始各种回顾之前准备的知识.为了这次面试大概准备了半个月,利用每天下班到家8点到凌晨1点30的时间,疯狂的补充自己的技术栈。fei话不多说,直接进入正题!以下就是我曾在阿里面试的一些列操作,完完整整的分享给大家!同时也希望对大家能有所帮助!

m0_61926454的博客 1206

STM32实战开发(150):基于STM32的智能电力负荷控制系统开发

本文介绍了基于STM32的智能电力负荷控制系统的设计与实现,涵盖了硬件设计、软件设计、负荷预测与控制等多个方面。该系统能够实时监控电力负荷,预测未来负荷变化,并根据预测结果自动调节电力负荷,防止电网过载或浪费。未来,我们可以进一步优化该系统,加入更多的传感器数据,提升预测算法的精度,并结合大数据与云计算技术实现更为强大的远程控制与数据分析功能。

2201_76125393的博客 712

Linux性能调优之CPU时间分布(亲和性、带宽、权重)配置

带宽权重亲和性进程级别Cgroup-v2服务级别systyemd我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ------赫尔曼·黑塞《德米安》

山河已无恙 1711

Windows编程:用 VS2019 编写C语言程序

Windows编程

2401_82825368的博客 2295

基于深度学习的水质预测:多参数监测与预测

在本篇博客中,我们详细介绍了如何使用深度学习技术处理水质预测问题,包括数据集的准备与预处理、多层感知机模型的构建、模型的训练与评估以及模型优化策略。我们使用 Python 语言基于 TensorFlow 和 Keras 框架实现了模型,并给出了各种模型优化方法及对应代码。通过实践,我们可以发现深度学习技术在水质预测方面具有很好的应用潜力。在实际应用中,我们还可以根据具体问题和数据集进一步调整和优化模型,以获得更好的预测性能。

斌擎科技 1080

2019年最值得学习的编程语言TOP5

选择何种编程语言似乎无关紧要,因为大多数流行语言基于相同的基本概念,对于未经训练的人来说,大多数语言看起来都是一样的,都能得到大致相同的结果。但从开发人员的角度来看,编程语言不仅是一种工具,选择正确的编程语言将影响一个人的职业生涯,经济前景和未来的幸福。本文将推荐五种当下和未来一段时间最值得学习五种编程语言,并逐一介绍它们的特点和优点,以及面试中需要注意的要点。 对于初学者来说,选择编程语言...

python学习者的博客 9352

Magisk如何针对性隐藏Root避免被检测

Magisk隐藏特征码有两种途径,一种是通过插件,一种是定制源码。插件的方式相对简单,但是使用范围也有限,好处是成本低好上手。定制源码难度大,成本高,好处是稳定,后续也好更新维护。

zhonglunshun的专栏 1万+

手把手教你学SOC芯片架构--NoC(片上网络,Network on Chip)全方位解析

​、​。

MHD0815的博客 863

阿里巴巴2019年提前批编程题解析

*光明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么? 光明小学可以抽象成一张有N个节点的图,每两点间都有一条道路相连。光明小学的每个班都有M个学生,所以你要为他们设计出一条恰好经过M条边的路径。 光明小学的小朋友们希望全盘考虑所有的因素,所以你需要把任意两点间经过M条边的最短路径的距离输出出来以供参考。* 你需要设...

jiulexiaoyao的博客 1548

【车载以太网】Eth Stack Bringup

摘要:本文基于AUTOSAR架构,详细介绍了在TC3xx硬件平台上实现EthStack Bringup的全过程。作者通过配置MCAL和Davinci工具,完成了EthTrcv、Eth、EthIf、EthSM和TcpIp等模块的集成,并解决了16字节内存对齐和以太网速率不匹配等问题。最终实现了PC端与开发板的Ping通,并通过WireShark验证了数据包收发。文章总结了调试中的关键问题与解决方案,强调了实践的重要性,为后续EthStack的深入分析奠定了基础。

qq_36056498的博客 180

编程测试题 代码题 二叉树的四种遍历,非递归实现

2019阿里巴巴编程测试题(在线和手写,记事本写)~~ 要求: 给定一个字符串,按照给定的字节数要求输出, 如: str="ABCDEF", 输出4个字节,则为: ABCD. 如: str="哈ABCDEF",输出4个字节,则应为 “哈AB”。 我写的代码是这样的: @Test public void test1() { String str="哈abcdf...

黎明小书生 495

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【收藏】2019阿里巴巴面试题集锦(含答案)

本文是阿里巴巴 2019 面试题集锦(含答案),是阿里巴巴自身技术专家们结合多年的工作、面试经验总结提炼而成的面试真题。通过这些面试题,还可以间接地了解技术大牛们出题思路与考察要点。 原文链接:https://mp.weixin.qq.com/s/oHdfGl292Yoz8bz3B5O6AQ 想要入职大厂可谓是千军万马过独木桥。要通过层层考验,刷题肯定是必不可少的。 为帮助开发者们提升面试技能、有...

weixin_43451928的博客 5470

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

阿里巴巴十个Java小测试题

这是4月23号阿里技术公众号出的十个Java的小测试题,感觉很有意思,我就做了一下,果然没有全对,事后给出了答案,码一下学习学习。 Java 测试题答案及详解 -阿里技术出品- 题目一: float a = 0.125f; double b = 0.125d; System.out.println((a - b) == 0.0); 代码的输出 结果是什么? A. true B. false ...

熊仙森滴Blog 1034

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

阿里巴巴2018秋招提前批Android开发编程测试题

题目描述: 启动速度时APP的核心内容但在超级APP中经常出现由于启动任务繁多导致启动速度慢的问题。因此我们尝试通过并行启动任务加快启动速度。假设启动任务都是独立的,并且多线程并行执行,那么恰定一组正整数( 输入 11 1 10  100  200  50  90  30  20  10  27  57 输出 298 。。。。。。。。。。。。。。。。。

u011630900的博客 843

一道阿里的内推编程测试题

博主今年研二,前几天舍友找实习投了阿里的内推,然后做了50分钟的测试题和一道编程题,测试题不用说,基本上就是智力题和性格测试,编程题限时30分钟,当时她没做出来,交卷后我俩讨论了很久,大概有了个结果,觉得可以把思路分享一下。题目大致如下:输入两个数字串1.将数字串的某一位+12.将数字串的某一位-13.交换数字串中任意两个数字的位置最终使得第一个数字串变成第二个数字串,请问最少需要多少次操作?题意...

zhouyong224的博客 764

阿里巴巴2018秋招在线编程测验--射击场

阿里巴巴2018秋招在线编程测验 * 题目:假设靶场有n个靶子,n个靶子的分数为数组score[n],score[i]为0的靶子不能射击。 射中第i个靶子的,假如第i个靶子的左右两边均有相邻靶子,则射中第i个靶的得分为score[left]*score[i]*score[right],并且射中之后,score[left]和score[right]变为相邻的两个靶子。当射中的靶子右边没有相邻的靶子则得分为score[left]*score[i];左边同理。 若左右两边均没有靶子,则得分为score[i],求

yang52017的博客 3276

阿里巴巴2018校招编程测试题

阿里巴巴程序测试题,说实话第一眼看到这道题我感觉像是博弈论。30分钟的时间没有做出来,只能骗点分,证明我是会写java的··· 还是说正题吧···题目是这样的,A、B是两个无聊的人,他们决定玩个游戏:现在有一个非负整数组成的数组,A和B轮流从数组中取出一个数,且只能从数组的两端取,每个人都以获得取到数之和最大的原则取数(这个原则很重要)。在数组被俩人消耗空之后,每个人计算取到的所有数字的和Sa和Sb,如果Sa

everyting_is_full的博客 1937

这 10 道 Java 测试题,据说阿里 P7 的正确率只有 50%

《Java 开发手册(泰山版)》昨天已经发布,相信很多同学已经下载阅读了。为了帮助大家更好的理解手册,孤尽老师亲自出了 10 道Java 测试题,据说这 10 道测试题,阿里 P7 工...

HollisChuang's Blog 1939

2010年9月26日微软笔试题

一、选择题(10个,答对得4分,不答得0分,答错得-1分) Question 1 合并两个已排好序的数组在最坏情况下需要比较多少次? (A)2n (B)2n-1 (C)2n+1 (D)2n-2 (E)None of above Question 2 Question 3 Question 4 Question 5 Question 6 Question 7 #include #include int main() {     char a[] = "Hell

zhenyongyuan123的专栏 1708

阿里巴巴集团2017暑期实习生在线编程测试题分析-Java研发工程师

问题描述题目:一个整型数组,将其划分为和相同的4个切片,例如:{ 2, 3, 5, 1, 2, 2, 1, 1, 3 },切片操作后划分为:{2,3},{5},{1,2,2},{1,1,3},也就找到所谓的四等分点。只不过输出结果为true或者false(是否能得到这样的4个切片)。同时要求时间复杂度和空间复杂度为o(n)。编程实现下面是本人的一种实现方法: static boolean re

小明同学爱思考 1万+

阿里巴巴2017校招C++岗位在线编程题-RNA嵌套

思路   对每一个二段式集合挨个遍历,比较嵌套的二段式集合的嵌套深度即可。 #include #include #include #include #include #include #include #include using namespace std; class Interval { public: explicit Interval(size_t lef

keaiyuzong的博客 1392

2018阿里巴巴秋招内推Java研发岗位在线编程测试题

题目:坐标图上有n个点,求要从原点到这n个点各去一次的最短路线长度,只能沿坐标格走,例:从(0,0)到(1,2),要先往x轴方向走一步,再往y轴方向走两步。 样例输入:第一行表示点的个数,其余的行表示各点横纵坐标,用逗号分开。 3 1,2 3,4 5,6 样例输出:先到(1,2),再到(3,4),再到(5,6)的路径最短,输出路径长度。 11 分析:dp问题,求出原点到各点及各点之...

qq_42800864的博客 3458

阿里巴巴测试题 -- 取石子问题

题目:有n个石子(n<=100),A、B双方轮流选取,每次取走若干个石子,取走最后一个石子的一方获胜。要求:第一次不能全部取完;各方每次选取的石子数不能为0,也不能超过上次对方选择的石子数。问:如果A先取,那么第一次应该选几个才能保证获胜?如果第一次有多种策略,则输出石子数最多的一种

Davey的专栏 1997
上一篇: 【华为机试在线训练】Day 10
下一篇: 【华为机试在线训练】Day 11
HelloZEX
博客等级 码龄11年 486粉丝 264原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值