最小较小codeforces 2B The least round way
查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记载吧!
求从左上角到右下角所经过的数字之积末端所含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.
那蝴蝶花依然花开花落,而我心中的蝴蝶早已化作雄鹰飞向了广阔的蓝天。
- #include<stdio.h>
- #include<string.h>
- #define N 1001
- #define inf 0x3fffffff
- int dp[N][N][2];
- int num[N][N][2];//记载每个数可分解2,5的个数
- int dir[N][N][2];//记载方向
- void prif(int n,int x,int y)
- {
- if(x==y&&x==0)return;
- if(dir[x][y][n]==0)
- {
- prif(n,x-1,y);
- printf("D");
- }
- else if(dir[x][y][n]==1)
- {
- prif(n,x,y-1);
- printf("R");
- }
- }
- int main()
- {
- int n,i,j,k,a,b,ii,flag;
- while(scanf("%d",&n)!=-1)
- {
- flag=0;
- for(i=0;i<n;i++)
- for(j=0;j<n;j++)
- {
- dp[i][j][0]=dp[i][j][1]=inf;
- scanf("%d",&a);
- if(a==0){flag=1;ii=i;continue;}//记载0所在行数
- k=0;b=a;
- while(b%2==0)
- {
- k++;
- b/=2;
- }
- num[i][j][0]=k;//记载a可分解2的个数
- b=a;k=0;
- while(b%5==0)
- {
- k++;
- b/=5;
- }
- num[i][j][1]=k;//记载a可分解5的个数
- }
- dp[0][0][0]=num[0][0][0];
- dp[0][0][1]=num[0][0][1];
- for(i=0;i<n;i++)
- for(j=0;j<n;j++)
- {
- if(i-1>=0)
- {
- if(dp[i][j][0]>dp[i-1][j][0]+num[i][j][0])
- {
- dp[i][j][0]=dp[i-1][j][0]+num[i][j][0];
- dir[i][j][0]=0;
- }
- if(dp[i][j][1]>dp[i-1][j][1]+num[i][j][1])
- {
- dp[i][j][1]=dp[i-1][j][1]+num[i][j][1];
- dir[i][j][1]=0;
- }
- }
- if(j-1>=0)
- {
- if(dp[i][j][0]>dp[i][j-1][0]+num[i][j][0])
- {
- dp[i][j][0]=dp[i][j-1][0]+num[i][j][0];
- dir[i][j][0]=1;
- }
- if(dp[i][j][1]>dp[i][j-1][1]+num[i][j][1])
- {
- dp[i][j][1]=dp[i][j-1][1]+num[i][j][1];
- dir[i][j][1]=1;
- }
- }
- }
- k=dp[n-1][n-1][0]>dp[n-1][n-1][1];
- if(flag==1&&dp[n-1][n-1][k]>1)//如果有0,而且求得的最小值大于1,就选择经过0的一条路径
- {
- puts("1");
- for(i=1;i<=ii;i++)
- printf("D");
- for(j=1;j<n;j++)
- printf("R");
- for(i=ii+1;i<n;i++)
- printf("D");
- }
- else
- {
- printf("%d\n",dp[n-1][n-1][k]);
- prif(k,n-1,n-1);
- }
- printf("\n");
- }
- return 0;
- }
文章结束给大家分享下程序员的一些笑话语录:
一边用着越狱的ip,一边拜乔帮主的果粉自以为是果粉,其实在乔帮主的眼里是不折不扣的叛徒。
---------------------------------
原创文章 By
最小和较小
---------------------------------
最小较小codeforces 2B The least round way的更多相关文章
- Codeforces #2B The least round way(DP)
Description 有一个n*n的正整数矩阵,要你求一条从第一行第一列的格子到第n行第n列的路,使得你走过的格子里面的数乘起来的值末尾的零的个数最小.输出最小个数. Input 第一行包括1个数n ...
- Codeforces 2B The least round way(dp求最小末尾0)
题目链接:http://codeforces.com/problemset/problem/2/B 题目大意: 给你一个nxn的矩形,找到一条从左上角到右下角的路径,使得该路径上所有数字的乘积的末尾0 ...
- codeforces 2B The least round way(DP+数学)
The least round way 题目链接:http://codeforces.com/contest/2/problem/B ——每天在线,欢迎留言谈论.PS.本题有什么想法.建议.疑问 欢迎 ...
- codeforces 2B The least round way 【DP】
VJ上可找到中文题意. 思路: 首先分解有多少2与多少5.接下来就是dp. 分两次,一次是根据2的数量贪心,另外一次是根据5的数量贪心,看哪一次乘积的末尾0最少. 需要注意的是两点: 1.输入有0的情 ...
- 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 ...
- CodeForces Contest #1110: Global Round 1
比赛传送门:CF #1110. 比赛记录:点我. 涨了挺多分,希望下次还能涨. [A]Parity 题意简述: 问 \(k\) 位 \(b\) 进制数 \(\overline{a_1a_2\cdots ...
- 最小割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,可以 ...
- codeforces B. George and Round 解题报告
题目链接:http://codeforces.com/contest/387/problem/B 题目意思:给出1-n个问题,以及要满足是good rounde条件下这n个问题分别需要达到的compl ...
- 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 ...
随机推荐
- [转] TreeList 当前节点图标和背景色设置
高原之上原文TreeList 选中节点时图标状态和背景色 // 给TreeList加SelectImage this.treelArea.SelectImageList = imglCustom; / ...
- 对LR analysis的平均事务响应时间和summary中时间值不同的解释
最近在做性能测试对LR结果分析时,又碰到了关于summary里与平均事务响应时间中各交易的响应时间值不同的问题.在此做个记录. 若交易中设置了思考时间,分析时需要注意查看是否过滤思考时间. 设置是否包 ...
- IOS SQLITE 数据库操作
NSArray * array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); N ...
- Linux--使用expect进行自动交互
在linux下进行一些操作时,有时需要与机器进行一些交互操作,比如切换账号时输入账号密码,传输文件时输入账号密码登陆远程机器等,但有时候这些动作需要在shell脚本中进行,这个时候就可以使用expec ...
- WEB安全性测试测试用例(基础)
建立整体的威胁模型,测试溢出漏洞.信息泄漏.错误处理.SQL 注入.身份验证和授权错误. 输入验证 客户端验证服务器端验证(禁用脚本调试,禁用Cookies) 1.输入很大的数(如4,294,967, ...
- HDU 1707
思路:标记课程表上的课程,询问时遍历课程表,再以字典序输出名字. #include<iostream> #include<stdio.h> #include<stdlib ...
- 安装CPqD/ofdissector遭遇的错误
为了安装支持openflow1.3的wireshark插件,在下载了ofdissector.git,并进入了其src目录后,执行scons install,出现如下错误: util/FieldMana ...
- (转载)OC学习篇之---第一个程序HelloWorld
之前的一片文章简单的介绍了OC的相关概述,从这篇开始我们就开始学习OC的相关知识了,在学习之前,个人感觉需要了解的其他的两门语言:一个是C/C++,一个是面向对象的语言(当然C++就是面向对象,不过这 ...
- 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 ...
- Activity生命周期与状态保存
弹出系统对话框,程序仍部分可见 onPause 对话框消失时 onResume 调用一个新的Activity,老的Activity不可见时 onPause->onStop 从新的Activi ...