【题解】

  可以发现10的因数除了1和10之外只有2和5了,那么走过的路径上各个数字的2的因数个数之和、5的因数个数之和中较小的一个即是答案。这样的话DP即可。同时需要注意有0的情况,有0的时候有一个答案为1,要和前面求出的答案取较小值。

 #include<cstdio>
#include<algorithm>
#define LL long long
#define rg register
#define N 1010
using namespace std;
int n,m,px,py,tot,a[N][N],f[N][N],f2[N][N],exp2[N],exp5[N];
bool flag=;
struct rec{
int x,y;
}from[N][N],from2[N][N];
char ans[N<<];
inline int read(){
int k=,f=; char c=getchar();
while(c<''||c>'') c=getchar();
while(''<=c&&c<='')k=k*+c-'',c=getchar();
return k*f;
}
int main(){
n=read(); exp2[]=exp5[]=;
for(rg int i=;i<=;i++) exp2[i]=exp2[i-]<<;
for(rg int i=;i<=;i++) exp5[i]=exp5[i-]*;
for(rg int i=;i<=n;i++)
for(rg int j=;j<=n;j++){
a[i][j]=read();
if(!a[i][j]){
flag=; px=i; py=j; continue;
}
int tmp=a[i][j];
for(rg int k=;k;k--) if(tmp%exp2[k]==) f[i][j]+=k,tmp/=exp2[k];
while(tmp%==) f[i][j]++;
tmp=a[i][j];
for(rg int k=;k;k--) if(tmp%exp5[k]==) f2[i][j]+=k,tmp/=exp5[k];
while(tmp%==) f2[i][j]++;
// while(tmp%2==0){
// f[i][j]++;
// tmp>>=1;
// }
// tmp=a[i][j];
// while(tmp%5==0){
// f2[i][j]++;
// tmp/=5;
// }
}
for(rg int i=;i<=n;i++) f[i][]=f[][i]=f2[i][]=f2[][i]=2e9;
// f[1][0]=f[0][1]=f2[1][0]=f2[0][1]=0;
for(rg int i=;i<=n;i++)
for(rg int j=;j<=n;j++){
if(f[i-][j]<f[i][j-]){
from[i][j]=(rec){i-,j};
f[i][j]+=f[i-][j];
}
else{
from[i][j]=(rec){i,j-};
f[i][j]+=f[i][j-];
}
}
for(rg int i=;i<=n;i++)
for(rg int j=;j<=n;j++){
if(f2[i-][j]<f2[i][j-]){
from2[i][j]=(rec){i-,j};
f2[i][j]+=f2[i-][j];
}
else{
from2[i][j]=(rec){i,j-};
f2[i][j]+=f2[i][j-];
}
}
if(flag){
if(min(f[n][n],f2[n][n])>){
puts("");
for(rg int i=;i<=px;i++) putchar('D');
for(rg int i=;i<=py;i++) putchar('R');
for(rg int i=px+;i<=n;i++) putchar('D');
for(rg int i=py+;i<=n;i++) putchar('R');
return ;
}
}
printf("%d\n",min(f[n][n],f2[n][n]));
if(f[n][n]<f2[n][n]){
int nx=n,ny=n;
while(){
int fx=from[nx][ny].x,fy=from[nx][ny].y;
if(fx==||fy==) break;
if(fx<nx) ans[++tot]='D';
else ans[++tot]='R';
nx=fx; ny=fy;
if(fx==&&fy==) break;
}
}
else{
int nx=n,ny=n;
while(){
int fx=from2[nx][ny].x,fy=from2[nx][ny].y;
if(fx==||fy==) break;
if(fx<nx) ans[++tot]='D';
else ans[++tot]='R';
nx=fx; ny=fy;
if(fx==&&fy==) break;
}
}
for(rg int i=tot;i;i--) putchar(ans[i]);
// puts("");
// for(rg int i=1;i<=n;i++){
// for(rg int j=1;j<=n;j++) printf("[%d %d] ",from2[i][j].x,from2[i][j].y);
// puts("");
// }
return ;
}

CF2B The least round way的更多相关文章

  1. CF2B The least round way(贪心+动规)

    题目 CF2B The least round way 做法 后面\(0\)的个数,\(2\)和\(5\)是\(10\)分解质因数 则把方格中的每个数分解成\(2\)和\(5\),对\(2\)和\(5 ...

  2. CF2B The least round way(dp+记录路径)

    B. The least round way time limit per test 2 seconds memory limit per test 64 megabytes input standa ...

  3. CF2B The least round way 题解

    都是泪呀...↑ 题目传送门 题意(直接复制了QWQ) 题目描述 给定由非负整数组成的\(n \times n\)的正方形矩阵,你需要寻找一条路径: 以左上角为起点, 每次只能向右或向下走, 以右下角 ...

  4. [CF2B] The least round way - dp

    给定由非负整数组成的n×n 的正方形矩阵,你需要寻找一条路径: 以左上角为起点 每次只能向右或向下走 以右下角为终点 并且,如果我们把沿路遇到的数进行相乘,积应当是最小"round" ...

  5. SQL Server 随机数,随机区间,随机抽取数据rand(),floor(),ceiling(),round(),newid()函数等

    在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会取随机整数.那就看下面 ...

  6. SQL中Round(),Floor(),Ceiling()函数的浅析

    项目中的一个功能模块上用到了标量值函数,函数中又有ceiling()函数的用法,自己找了一些资料,对SQL中这几个函数做一个简单的记录,方便自己学习.有不足之处欢迎拍砖补充 1.round()函数遵循 ...

  7. oracle的round函数和trunc函数

    --Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual --2013- ...

  8. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  9. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

随机推荐

  1. redis.exceptions.ConnectionError: Error 10061 connecting to 127.0.0.1:6379. 由于目标计算机积极拒绝,无法连接

    redis.exceptions.ConnectionError: Error 10061 connecting to 127.0.0.1:6379. 由于目标计算机积极拒绝,无法连接   是由于没有 ...

  2. [国家集训队2]Tree I

    https://www.zybuluo.com/ysner/note/1294263 题面 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解 ...

  3. POJ3675 Telescope 圆和多边形的交

    POJ3675 用三角剖分可以轻松搞定,数据也小 随便AC. #include<iostream> #include<stdio.h> #include<stdlib.h ...

  4. 逻辑频道号---DVB NIT LCN

    先介绍NIT,NIT描述如下: 有一点要注意,NIT是对大网的描述,即NIT并不是描述当前的流,而是描述大网的某些或者全部流.如下图,TS流描述1-6共对6个频点不同的TS流进行了描述,具体对哪一个流 ...

  5. IE6的3像素BUG产生条件及解决方法

    1.IE6中第一个元素浮动第二个元素不浮动,这两个元素之间就会产生3像素BUG 2.解决方案: 2.1若若宽度一定则给第二个元素添加 float 样式即可: 2.2若宽度自适应: 2.2.1  _ma ...

  6. 几个SQL小知识(转)

    原文地址:http://www.cnblogs.com/wuguanglei/p/4205976.html 写在前面的话:之前做的一个项目,数据库及系统整体构架设计完成之后,和弟兄们经过一段时间的编码 ...

  7. bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课【spfa】

    洛谷的数据毒啊 把(i,j,k)作为一个点spfa,表示点(i,j)朝向k方向,然后向四个方向转移即可 #include<iostream> #include<cstdio> ...

  8. video 能播放声音不能播放视频,黑屏

    与视频编码格式有关,mp4的视频编码有三种:MPEG4(DivX),MPEG4(Xvid),AVC(H264). 浏览器播放视频的支持有限,MP4格式的视频只支持h.264的视频: 视频编码: AVC ...

  9. EditText(3)输入时自动完成功能

    在android输入自动完成功能由EditText的子类 AutoCompleteTextView 实现.如下: 1,在xml中使用 <AutoCompleteTextView android: ...

  10. 喜欢Swift编程语言的人主要是初学者?

    一早一起来,朋友圈除了被苹果发布会刷屏外,还漫天散布着一条类似的招聘消息:“招聘iOS程序员,要求拥有5年的Swift开发经验,有狼性,待遇月薪20K+,专车接送.” 随后身边的朋友很快就开始调侃:& ...