做这道题花了很多时间,所以没有长期的训练,想要在短时间内解决这种题目还是有一定的难度。

du熊的机器人
Description
du熊正在玩一个别人刚送给它的机器人。这个机器人只能在一个棋盘中行走,棋盘的左上角格子为(0, 0),右下角格子为(X, Y)。
du熊控制这个机器人从棋盘的左上角,走到右下角,再从右下角回到左上角。当机器人从左上角走到右下角的过程中,如果它当前所在格子为(x, y),则它只能走到(x+1, y)或(x, y+1)的格子;当机器人从右下角走回左上角的过程中,如果它当前所在的格子为(x, y),则它只能走到(x-1, y)或(x, y-1)的格子。并且du熊要求机器人从左上角走到右下角再走回左上角的整个过程中,最多经过同一个格子一次。
请你帮du熊计算出这个机器人一共有多少种不同的路线。
Input
输入的第一行为一个正整数T(0<T<=50),表示数据组数。
接下来的T行,每行有两个整数,分别表示X和Y。(1<=X,Y<=1000)
Output
对每组输入数据,输出一个整数,表示机器人不同的路线数量。
Sample Input
3
1 1
1 1000
3 4
Sample Output
2
2
100
问题分析:
群举是第一个直觉的做法,但题目里要求X,Y可以到1000,而X,Y达到10就已经是比较大的一个数,这个数目至少相当于从20的数中选10个出来。
第二想法是动态规划,因为每个点的运动使其构成树结构,但状态转移也不能很容易的找出来
定义S(m,n,x):满足某种条件的路径的数目,这些条件包括:
1、从坐标(0,0)出发,经过(m,n),终点是(0,1)
2、经过每个坐标最多一次
3、经过(x,0)
任一条逆时针可以走的路径,顺时针也满足题目要求 ,所以2*S(m,n,0)就是题目要求的值。而根据我们的定义,终点是(0,1),那么第一步一定是(0,0)->(1,0),S(m,n,0)等于S(m,n,1)。
接下来定义的状态转移:
终点是(0,1),可以从两个方向到达(0,1)
1、最后一步(1,1)->(0,1)
这种情况下,满足条件的路径有这样的形式:(0,0)->(1,0)->...(m,n)->...->(1,1)->(0,1)
其数目等于形式为(1,0)->...(m,n)->...->(1,1)的所有满足条件的路径的数目,等于形式为(0,0)->...(m-1,n)->...->(0,1)的的所有满足条件的路径的数目,等于S(m-1,n,x-1)
2、最后一步(0,2)->(0,1)
由定义,一定存在某一步:(x,0)->(x,1),这个是显然的
对每个1<=x<=m,我们计算满足形式(0,0)->...->(x,0)->(x,1)->...->(m,n)->...->(0,2)->(0,1)的所有路径的数目,定义这个数目为t(m,n,x)
所有经过(x,0)形式满足(0,0)->...->(x,0)...->(m,n)->...->(0,2)->(0,1)的路径的数目为sum(t(m,n,x:m))
怎么求t(m,n,x)?观察可以发现,t(m,n,x)恰好等于S(m,n-1,x)
总结一下
S(m,n,x)= S(m-1,n,x-1) + sum(S(m,n-1,x:m)
边界条件:
我们总要要求起始点是(0,0)终点是(0,1),则S(m,0,x)=0,应为没有终点(0,1)不存在
S(0,n,x) = 0,
S(0,0,0)=1,
S(0,1,0)=1,
这几个条件画个图都能简单的推出来
空间复杂度:O(M*M*N),时间复杂度O(M*M*N)
最后一个问题,考虑到结算的结果特别大,状态转移矩阵可能要使用大数的数据结构
我的实现
#define AL 1000+1
long pathCount(const size_t M, const size_t N){long S[AL][AL][AL];for(size_t n = 0; n <= N; n++)S[0][n][0] = 0;for(size_t m = 0; m <= M; m++)for(size_t x = 0; x <= M; x++)S[m][0][x] = 0;S[0][0][0] = 1;S[0][1][0] = 1;for(size_t m = 1; m <= M; m++){for(size_t n = 1; n <= N; n++){long tmpS = 0;for(size_t x = m;x >= 1 ; x--){tmpS += S[m][n - 1][x];S[m][n][x] = S[m-1][n][x-1] + tmpS;}S[m][n][0] = S[m][n][1];}}return 2*S[M][N][0];
}

百度之星astar-413-problem1相关推荐

  1. 关于百度之星Astar程序设计大赛

    前一阵参加了百度之星Astar的比赛,虽说注册人数有3万多,不过我觉得有很大一部分都是来打酱油的吧.前几天收到短信通知进了复赛,3万多报名的当中取2000个,也算是对自己付出的一些回报吧. 初赛是采用 ...

  2. 2016百度之星 - 初赛(Astar Round2B)解题报告

    此文章可以使用目录功能哟↑(点击上方[+]) 被自己蠢哭,去年还能进一下复赛,今年复赛都没戏了... 链接→2016"百度之星" - 初赛(Astar Round2B)  Prob ...

  3. 2016百度之星 - 初赛(Astar Round2A)解题报告

    此文章可以使用目录功能哟↑(点击上方[+]) 有点智商捉急,第一题卡了好久,看来不服老,不服笨是不行的了...以下是本人目前的题解,有什么疑问欢迎提出 链接→2016"百度之星" ...

  4. 百度之星大赛启动,聚焦目标检测,总奖池11.2万!

    点击我爱计算机视觉标星,更快获取CVML新技术 竞赛简介 用科技让复杂的世界更简单"是百度全新的公司使命,而科技为生活则是我们一直坚信的品牌理念.百度自2017年发起了面向全球AI技术爱好者 ...

  5. 2016百度之星复赛 1003 拍照 优先队列

    2016"百度之星" - 复赛(Astar Round3) Ended  2016-05-29 14:00:00 - 2016-05-29 17:00:00 Current Tim ...

  6. 2016百度之星总结帖

    2016百度之星总结帖 测试赛 选的2015资格赛的部分题目,第二题字符串处理,第三题map计数 1001 大搬家 f f (x) = x 两次置换后回到原位 dp a->b && ...

  7. 百度之星的十五年:坚定技术信仰,普惠AI顶级人才

    "真是一件非常伟大的事情." 清华大学邬晓钧教授在参加一场活动时发出了这样的感慨. 那是什么让这位人工智能学术界大咖级人物发出如此赞赏? 答案是刚刚落幕的百度之星大赛. △图注:百 ...

  8. 三个角色,十五年,二十万选手:我们如何理解“百度之星”?

    你在上学时,有幻想过那些漫画主角般的经历吗? 就是经历千辛万苦,见证世界之大和高手无数,最终登上世界顶峰,迈入时代前沿.这种<灌篮高手><足球小将>里的剧情,大多数人只在看漫画 ...

  9. 百度之星试题每周一练

    百度之星,是全球最大的中文搜索引擎,百度公司面向中国高校学生和编程爱好者所举办的高水平的程序设计大赛.他所考试的题目,全部都是算法的题目. 鄙人虽然是一个.net程序员,在工作之余,喜爱算法. 这个问 ...

  10. 2011百度之星初赛B圆环

    这是百度之星2011初赛B中的第一道题,题目也很水,只要找到解题思路就OK了.. 题目: 时间限制:1000ms 描述 一个圆环上有n个位置,这n个位置按顺时针依次标号为1, 2, -, n.初始时圆 ...

最新文章

  1. 一文详解单目结构光参数法
  2. delphi 图像处理 图像左旋右旋
  3. 开源软件架构总结之——Bash(readline做输入交互式,词法语法分析,进程交互)...
  4. JVM调优总结(九)-新一代的垃圾回收算法
  5. [react] 写例子说明React如何在JSX中实现for循环
  6. ActiveMQ学习总结(3)——spring整合ActiveMQ
  7. Adhesive框架系列文章--报警处理流程使用实践
  8. 让django完成翻译,迁移数据库模型
  9. sqlite的数据库文件在什么地方? sqlite数据库文件后缀名,提取方法,打开方法。
  10. python计算复合材料层合板ABD刚度矩阵、预测层合板强度
  11. 485Modbus协议
  12. 矩阵卷积运算的具体过程
  13. go浏览器java_GO浏览器JAVAWP版下载_GO浏览器JAVA2016最新版_GO浏览器JAVA1.2.2-华军软件园...
  14. m计算机代表什么意思,计算器上的m+是什么意思
  15. 关于数学基础的研究现状
  16. C语言 水仙花数两种算法
  17. 给教师的一百条意见读后感
  18. Android 文件下载中文名乱码的解决办法
  19. 第二章 java基础语言(三)
  20. 写给天天说“程序员完了”的人,android开发入门到精通

热门文章

  1. 路由器重温——ADSL/VDSL接口配置管理
  2. 叶武滨老师时间管理感悟分享4
  3. 中考可以用计算机,中考计算机考试内容·中考信息技术要考哪些项目?
  4. 高等数学 第四章 第二类换元法
  5. 【转】:金龙鱼等品牌花生油全线涨价每瓶最高涨12.8元
  6. 电子信息/通信保研/考研复试经验贴,追更东南大学
  7. python 读取图片,保存到指定目录,删除图片
  8. 小米平板5ProWIFI(elish)刷ArrowOS
  9. 激励名言 摘抄其他编程人员的话
  10. java构建n阶魔方方阵