CF 2B.The least round way
2013-10-21 15:27
323 查看
题目链接
很久以前就见过此题,以前看了题解,然后今天写了写,写的真搓。
很久以前就见过此题,以前看了题解,然后今天写了写,写的真搓。
#include <cstdio> #include <cstring> #include <string> #include <cmath> #include <ctime> #include <cstdlib> #include <iostream> using namespace std; int dp2[1001][1001]; int dp5[1001][1001]; int p2[1001][1001]; int p5[1001][1001]; int p[1001][1001]; int que[5001]; int x,y,n,num = 0; void f1() { int a,b; a = b = n; while(1) { if(a > 1&&dp2[a][b] == dp2[a-1][b] + p2[a][b]) { que[num++] = 1; a --; } else if(dp2[a][b] == dp2[a][b-1] + p2[a][b]) { que[num++] = 2; b --; } if(a == 1&&b == 1) break; } } void f2() { int a,b; a = b = n; while(1) { if(a > 1&&dp5[a][b] == dp5[a-1][b] + p5[a][b]) { que[num++] = 1; a --; } else if(dp5[a][b] == dp5[a][b-1] + p5[a][b]) { que[num++] = 2; b --; } if(a == 1&&b == 1) break; } } void f3() { int a,b; a = b = n; while(1) { if(a > x) { que[num++] = 1; a --; } else if(b > y) { que[num++] = 2; b --; } if(a == x&&b == y) break; } while(1) { if(a > 1) { que[num++] = 1; a --; } else if(b > 1) { que[num++] = 2; b --; } if(a == 1&&b == 1) break; } } int main() { int i,j,temp,flag; scanf("%d",&n); flag = 0; for(i = 1;i <= n;i ++) { for(j = 1;j <= n;j ++) { scanf("%d",&p[i][j]); if(p[i][j] == 0) { flag = 1; x = i; y = j; continue; } temp = p[i][j]; while(temp%2 == 0) { p2[i][j] ++; temp /= 2; } while(temp%5 == 0) { p5[i][j] ++; temp /= 5; } } } for(j = 1;j <= n;j ++) { dp2[1][j] = dp2[1][j-1] + p2[1][j]; dp5[1][j] = dp5[1][j-1] + p5[1][j]; } for(i = 1;i <= n;i ++) { dp2[i][1] = dp2[i-1][1] + p2[i][1]; dp5[i][1] = dp5[i-1][1] + p5[i][1]; } for(i = 2;i <= n;i ++) { for(j = 2;j <= n;j ++) { dp2[i][j] = min(dp2[i-1][j],dp2[i][j-1]) + p2[i][j]; dp5[i][j] = min(dp5[i-1][j],dp5[i][j-1]) + p5[i][j]; } } if(flag == 0) { printf("%d\n",min(dp2 ,dp5 )); if(dp2 < dp5 ) f1(); else f2(); } else { printf("%d\n",min(1,min(dp2 ,dp5 ))); if(min(dp2 ,dp5 ) >= 1) f3(); else if(dp2 < dp5 ) f1(); else f2(); } for(i = num-1;i >= 0;i --) { if(que[i] == 1) printf("D"); else printf("R"); } printf("\n"); return 0; }
相关文章推荐
- CF 2B The least round way
- CF_2B_TheLeastRoundWay
- CF 2B The least round way(DP)
- CF 2B The least round way
- Codeforces 2B The least round way
- Codeforces 2B. The least round way
- 【Codeforces Beta Round 2B】【贪心 DP】The least round way 从(1,1)走到(n,n)乘积尾数0尽可能少
- CodeForces 2B The least round way
- Codeforces 2B. The least round way(动态规划)
- CF 2 B. The least round way
- codeforces 2B The least round way
- 最小较小codeforces 2B The least round way
- codeforces 2B.The least round way(数学&dp)
- 2B - The least round way
- codeforces 2B The least round way DP因子路径
- coderforces 2B the least round way
- Codeforces 2B The least round way
- codeforces 2B The least round way
- [CF2B]The least round way
- [codeforces] 2B - The least round way