查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记载吧!

求从左上角到右下角所经过的数字之积末端所含0最小的个数

终究的积可以当作A*2^x*5^y,0的个数就是x,y中较小的数,

所以只需要分别dp求出出现2,5的最小个数,再进行比拟,选最小的一个

题目有个陷进:

就是给的数据可认为0,如果出现0的话,经过0这点的话结果为0,就是1个0,

如果不经过0的话,答案可能为0也可能>=1,所以只要求出不经过0出现最小0的个数跟1比拟,

如果大于1的话,最小的就是经过0的答案,否则就不经过0.

    每日一道理
那蝴蝶花依然花开花落,而我心中的蝴蝶早已化作雄鹰飞向了广阔的蓝天。
  1. #include<stdio.h>
  2. #include<string.h>
  3. #define N 1001
  4. #define inf 0x3fffffff
  5. int dp[N][N][2];
  6. int num[N][N][2];//记载每个数可分解2,5的个数
  7. int dir[N][N][2];//记载方向
  8. void prif(int n,int x,int y)
  9. {
  10. if(x==y&&x==0)return;
  11. if(dir[x][y][n]==0)
  12. {
  13. prif(n,x-1,y);
  14. printf("D");
  15. }
  16. else if(dir[x][y][n]==1)
  17. {
  18. prif(n,x,y-1);
  19. printf("R");
  20. }
  21. }
  22. int main()
  23. {
  24. int n,i,j,k,a,b,ii,flag;
  25. while(scanf("%d",&n)!=-1)
  26. {
  27. flag=0;
  28. for(i=0;i<n;i++)
  29. for(j=0;j<n;j++)
  30. {
  31. dp[i][j][0]=dp[i][j][1]=inf;
  32. scanf("%d",&a);
  33. if(a==0){flag=1;ii=i;continue;}//记载0所在行数
  34. k=0;b=a;
  35. while(b%2==0)
  36. {
  37. k++;
  38. b/=2;
  39. }
  40. num[i][j][0]=k;//记载a可分解2的个数
  41. b=a;k=0;
  42. while(b%5==0)
  43. {
  44. k++;
  45. b/=5;
  46. }
  47. num[i][j][1]=k;//记载a可分解5的个数
  48. }
  49. dp[0][0][0]=num[0][0][0];
  50. dp[0][0][1]=num[0][0][1];
  51. for(i=0;i<n;i++)
  52. for(j=0;j<n;j++)
  53. {
  54. if(i-1>=0)
  55. {
  56. if(dp[i][j][0]>dp[i-1][j][0]+num[i][j][0])
  57. {
  58. dp[i][j][0]=dp[i-1][j][0]+num[i][j][0];
  59. dir[i][j][0]=0;
  60. }
  61. if(dp[i][j][1]>dp[i-1][j][1]+num[i][j][1])
  62. {
  63. dp[i][j][1]=dp[i-1][j][1]+num[i][j][1];
  64. dir[i][j][1]=0;
  65. }
  66. }
  67. if(j-1>=0)
  68. {
  69. if(dp[i][j][0]>dp[i][j-1][0]+num[i][j][0])
  70. {
  71. dp[i][j][0]=dp[i][j-1][0]+num[i][j][0];
  72. dir[i][j][0]=1;
  73. }
  74. if(dp[i][j][1]>dp[i][j-1][1]+num[i][j][1])
  75. {
  76. dp[i][j][1]=dp[i][j-1][1]+num[i][j][1];
  77. dir[i][j][1]=1;
  78. }
  79. }
  80. }
  81. k=dp[n-1][n-1][0]>dp[n-1][n-1][1];
  82. if(flag==1&&dp[n-1][n-1][k]>1)//如果有0,而且求得的最小值大于1,就选择经过0的一条路径
  83. {
  84. puts("1");
  85. for(i=1;i<=ii;i++)
  86. printf("D");
  87. for(j=1;j<n;j++)
  88. printf("R");
  89. for(i=ii+1;i<n;i++)
  90. printf("D");
  91. }
  92. else
  93. {
  94. printf("%d\n",dp[n-1][n-1][k]);
  95. prif(k,n-1,n-1);
  96. }
  97. printf("\n");
  98. }
  99. return 0;
  100. }

文章结束给大家分享下程序员的一些笑话语录:

 一边用着越狱的ip,一边拜乔帮主的果粉自以为是果粉,其实在乔帮主的眼里是不折不扣的叛徒。

---------------------------------
原创文章 By
最小和较小
---------------------------------

最小较小codeforces 2B The least round way的更多相关文章

  1. Codeforces #2B The least round way(DP)

    Description 有一个n*n的正整数矩阵,要你求一条从第一行第一列的格子到第n行第n列的路,使得你走过的格子里面的数乘起来的值末尾的零的个数最小.输出最小个数. Input 第一行包括1个数n ...

  2. Codeforces 2B The least round way(dp求最小末尾0)

    题目链接:http://codeforces.com/problemset/problem/2/B 题目大意: 给你一个nxn的矩形,找到一条从左上角到右下角的路径,使得该路径上所有数字的乘积的末尾0 ...

  3. codeforces 2B The least round way(DP+数学)

    The least round way 题目链接:http://codeforces.com/contest/2/problem/B ——每天在线,欢迎留言谈论.PS.本题有什么想法.建议.疑问 欢迎 ...

  4. codeforces 2B The least round way 【DP】

    VJ上可找到中文题意. 思路: 首先分解有多少2与多少5.接下来就是dp. 分两次,一次是根据2的数量贪心,另外一次是根据5的数量贪心,看哪一次乘积的末尾0最少. 需要注意的是两点: 1.输入有0的情 ...

  5. Codeforces 2B. The least round way

    There is a square matrix n × n, consisting of non-negative integer numbers. You should find such a w ...

  6. CodeForces Contest #1110: Global Round 1

    比赛传送门:CF #1110. 比赛记录:点我. 涨了挺多分,希望下次还能涨. [A]Parity 题意简述: 问 \(k\) 位 \(b\) 进制数 \(\overline{a_1a_2\cdots ...

  7. 最小割dp Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) E

    http://codeforces.com/contest/724/problem/E 题目大意:有n个城市,每个城市有pi件商品,最多能出售si件商品,对于任意一队城市i,j,其中i<j,可以 ...

  8. codeforces B. George and Round 解题报告

    题目链接:http://codeforces.com/contest/387/problem/B 题目意思:给出1-n个问题,以及要满足是good rounde条件下这n个问题分别需要达到的compl ...

  9. CodeForces B. The least round way(dp)

    题目链接:http://codeforces.com/problemset/problem/2/B B. The least round way time limit per test 5 secon ...

随机推荐

  1. [转] TreeList 当前节点图标和背景色设置

    高原之上原文TreeList 选中节点时图标状态和背景色 // 给TreeList加SelectImage this.treelArea.SelectImageList = imglCustom; / ...

  2. 对LR analysis的平均事务响应时间和summary中时间值不同的解释

    最近在做性能测试对LR结果分析时,又碰到了关于summary里与平均事务响应时间中各交易的响应时间值不同的问题.在此做个记录. 若交易中设置了思考时间,分析时需要注意查看是否过滤思考时间. 设置是否包 ...

  3. IOS SQLITE 数据库操作

    NSArray * array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); N ...

  4. Linux--使用expect进行自动交互

    在linux下进行一些操作时,有时需要与机器进行一些交互操作,比如切换账号时输入账号密码,传输文件时输入账号密码登陆远程机器等,但有时候这些动作需要在shell脚本中进行,这个时候就可以使用expec ...

  5. WEB安全性测试测试用例(基础)

    建立整体的威胁模型,测试溢出漏洞.信息泄漏.错误处理.SQL 注入.身份验证和授权错误. 输入验证 客户端验证服务器端验证(禁用脚本调试,禁用Cookies) 1.输入很大的数(如4,294,967, ...

  6. HDU 1707

    思路:标记课程表上的课程,询问时遍历课程表,再以字典序输出名字. #include<iostream> #include<stdio.h> #include<stdlib ...

  7. 安装CPqD/ofdissector遭遇的错误

    为了安装支持openflow1.3的wireshark插件,在下载了ofdissector.git,并进入了其src目录后,执行scons install,出现如下错误: util/FieldMana ...

  8. (转载)OC学习篇之---第一个程序HelloWorld

    之前的一片文章简单的介绍了OC的相关概述,从这篇开始我们就开始学习OC的相关知识了,在学习之前,个人感觉需要了解的其他的两门语言:一个是C/C++,一个是面向对象的语言(当然C++就是面向对象,不过这 ...

  9. leetcode—3sum

    1.题目描述 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find ...

  10. Activity生命周期与状态保存

    弹出系统对话框,程序仍部分可见 onPause 对话框消失时 onResume   调用一个新的Activity,老的Activity不可见时 onPause->onStop 从新的Activi ...