【题解】

  可以发现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. Python不兼容问题

    今天遇到了一个Python2与3不兼容的坑. ride是基于robot框架的python自动化ui,但它只支持python2,而我电脑环境只有python3,想跑别人基于ride编写的测试用例,折腾了 ...

  2. JForum论坛添加UEditor文本编辑器

    在使用JForum论坛中发现论坛自带的文本编辑器不好用,不能上传图片,样式编辑也很麻烦,就想着把这个文本编辑器替换掉,我这里选用的是百度的开源富文本编辑器UEditor 替换后的效果图 替换方法如下 ...

  3. java笔记线程方式1线程终端与停止

    public final void stop():让线程停止,过时了,但是还可以使用.public void interrupt():中断线程. 把线程的状态终止,并抛出一个InterruptedEx ...

  4. JEECG框架使用Tomcat启动报ClassNotFound

    JEECG框架缺少一个类,名为AnnotationProcessor,包名为:org.apache package org.apache; import java.lang.reflect.Invoc ...

  5. bzoj 1599: [Usaco2008 Oct]笨重的石子【枚举】

    --我为什么要写这种题解-- 枚举投掷情况即可 #include<iostream> #include<cstdio> using namespace std; int s1, ...

  6. ionic安卓打包apk--安卓签名

    上周项目上线,在网上看了看打包的博客,感觉不是很清晰我自己来总结下 首先,我们在项目的根目录下 build android apk 的时候执行的命令一定要是 ionic build android - ...

  7. php 编译时 报错 configure: error: libXpm.(a|so) not found.

    编译环境 centos7 php 5.4.26 $ yum install libXpm-devel 显示已安装 百度得知 ubuntu虚拟机安装lamp遇到的问题 configure: error: ...

  8. JavaScript--DOM删除节点removeChild()

    删除节点removeChild() removeChild() 方法从子节点列表中删除某个节点.如删除成功,此方法可返回被删除的节点,如失败,则返回 NULL. 语法: nodeObject.remo ...

  9. HTML DOM getElementById() 方法

    定义和用法 getElementById() 方法可返回对拥有指定 ID 的第一个对象的引用. 语法 document.getElementById(id) 说明 HTML DOM 定义了多种查找元素 ...

  10. 经典矩阵dp寻找递增最大长度

    竖向寻找矩阵最大递增元素长度,因为要求至少一列为递增数列,那么每行求一下最大值就可以作为len[i]:到i行截止的最长的递增数列长度. C. Alyona and Spreadsheet time l ...