题目大意:

给一个n*n的图,每个点有点权,求从左上角走到右下角,把一路的点权乘起来,求后缀零个数最小值,并输出方案

首先0是特例,因为走了他,后缀零个数一定是1

然后如果有数字相乘得到0,那相当于*10,把10分解,它就只跟2和5的个数的最小值有关了

由于2和5的个数一个点并不能只保留一个,存多了会T

于是就猜了一个结论,路径经过的要么2最少,要么5最少

其实很好证得,用数学归纳法:

,如果2不是最少,那想成为最优解,5必须取得比2少,2随便取,,这时取值只和5有关,

,如果5不是最少,那想成为最优解,2必须取得比5少,5随便取,,这时取值只和2有关,

∴对于两种最优解,只和一个数的个数有关

所以对2和5分别递推最短路,取min即可

码:

#include<iostream>
#include<cstdio>
using namespace std;
int ans=9999999,n,i,j,daan[3000],f[1005][1005],x,er[1005][1005],g[1005][1005],wu[1005][1005];
int main()
{scanf("%d",&n);for(i=1;i<=n;i++)for(j=1;j<=n;j++){scanf("%d",&x);if(x==0){if(ans>1){ans=1;int cnt=0,k,l;for(k=1;k<j;k++)daan[++cnt]=1;for(k=1;k<n;k++)daan[++cnt]=2;for(k=i;k<n;k++)daan[++cnt]=1;         }er[i][j]=99999;wu[i][j]=99999;continue;}while(x%2==0){er[i][j]++;x/=2;                  }   while(x%5==0){wu[i][j]++;x/=5;                     }                       }for(i=0;i<=n+1;i++)for(j=0;j<=n+1;j++){f[i][j]=99999;}f[n][n+1]=0;//二的一遍 // 1 you 2 xia for(i=n;i>=1;i--)for(j=n;j>=1;j--){if(f[i+1][j]<f[i][j+1]){g[i][j]=2;f[i][j]=f[i+1][j];       }else{g[i][j]=1;f[i][j]=f[i][j+1];           }f[i][j]+=er[i][j];}if(ans>f[1][1]){ans=f[1][1];i=1;j=1;int cnt=0;while(i!=n||j!=n){daan[++cnt]=g[i][j];if(g[i][j]==1){j++;   }else i++;    }       }//五的一遍 // 1 you 2 xia for(i=n;i>=1;i--)for(j=n;j>=1;j--){if(f[i+1][j]<f[i][j+1]){g[i][j]=2;f[i][j]=f[i+1][j];        }else{g[i][j]=1;f[i][j]=f[i][j+1];           }f[i][j]+=wu[i][j];}if(ans>f[1][1]){ans=f[1][1];i=1;j=1;int cnt=0;while(i!=n||j!=n){daan[++cnt]=g[i][j];if(g[i][j]==1){j++;   }else i++;    }       }printf("%d\n",ans);for(i=1;i<=2*n-2;i++){if(daan[i]==1){printf("R");}else{printf("D");}}
}

2017.9.28 CF #R2 B 思考记录相关推荐

  1. 2017.9.30 CF #R4 D 思考记录

    题意:给一个a*b 的方格 ,把他装到n个其他(>a*>b)的格子里,格子之间可以叠加放,求最多放几个格子+方案 .实际上是要找一个严格上升序列 所以直接排序消除后效性,dp即可 cf真喜 ...

  2. 2017.5.28 codeforce h题思考记录

    并没有报codeforce  但有人想让我帮他看题,于是就做了 大概意思就是,给你200个空,让你在200个空中放字母,   再自己设计一个串,要求自己设计的这个串在这放着200个字母的串中作为子串出 ...

  3. 2017.10.5 最短母串 思考记录

    这个题n<=15,可以用10表示选取情况下的最优值 预处理两个串之间的连接关系,然后枚举状态转移 然而这个题还要输出方案,,而且还不让你开空间. 所以只能记录前继动态判断.. 所以十分难写难调 ...

  4. 2017.9.26 块的计数 思考记录

    这种题就属于那种描述很简单,要求很简单,但就是无从下手的题 这个题我只有n根n做法..枚举因数检验.. 首先对于任何块的大小,方案唯一,这是显然的,,如果划分位置改变1,一定有一个位置+1,一个位置- ...

  5. 2017.8.8 魔兽地图DotR 思考记录

    假题害人..  明明说了是一棵树,却还要强行加一组坑爹数据   所以网上的题解挂了好多 这题是很综合的树上背包问题. 由依赖关系转化为一些枚举来跑多重背包 由于是 "一棵树" 所以 ...

  6. 2017.3.25 魔术球问题 思考记录

    这个题还是不难的..(想了20分钟就出完解) 二分+网络流检验,,能加在上面的数大的向小的连边 总点数-最大匹配>n    :{l=mid+1,      记录答案       } else   ...

  7. 2017.10.23 chess 中国象棋 思考记录

    这种题的一般解法: 1. 发现状压可以搞,然后发现状态爆炸 2.考虑状态特点,一共只有几种可能的状态 3.考虑可不可以只对状态进行计数 4.离散统计贡献 码: #include<iostream ...

  8. 2017.10.19 起床困难综合征 思考记录

    2333noi送分题 首先暴力试每个数有些二进制位是会重复算的,,所以就考虑能否把每个二进制位独立考虑 老性质:二进制运算每一位独立 所以二进制dp,如果这一位输入1,是多少,输入0,是多少 然后按二 ...

  9. 2017.10.11 network 网络扩容 思考记录

    第一问是网络流. 第二问是费用流,但之前的边依然是可以用的,所以每个点决策:用原来的流量    购买一条流量,扫每条边加进去就可以了 然后限制流出为k 码: #include<iostream& ...

最新文章

  1. labview 随笔记录
  2. 银光中国网免费Silverlight空间Web Service部署方法
  3. hdu3037 Saving Beans
  4. tomcat正常启动但是访问 404
  5. error.html mp4,HTML Video error用法及代码示例
  6. 备份mysql的批处理命令
  7. Spring3.2.4集成quartz2.2.1定时任务(demo).
  8. base64链接转为地址php,php将图片链接转换为base64编码文件流
  9. 备忘录怎么用红笔标注_错题本的正确打开方法,你用对了吗?
  10. Socket编程实践(7) --Socket-Class封装(改进版v2)
  11. lazada铺货模式的选品_Lazada的商业模式有哪些?要怎么做?
  12. 验毛坯房要注意什么?
  13. Linux LVS Keepalived实现Httpd服务器80端口的负载均衡
  14. 【最新教程】Pytorch还是Tensorflow超强两大框架实战
  15. 安装qt qmake 错误:could not find a Qt installation of ''
  16. u2000网管服务器系统安装,华为U2000安装
  17. 【标准正态分布查询表】
  18. TensorFlow学习笔记(3)——TensorFlow实现Word2Vec
  19. 水箱建模最小二乘法_消防水箱的设置要求
  20. 企业财务制度二--会计科目名称和编号(一)1291 分期收款发出商品(转载)

热门文章

  1. Activity的属性taskAffinity
  2. 设计模式笔记二十四:模板模式
  3. js 拾遗 js时间戳转换
  4. pandas中的数据如何转化为张量?
  5. c++第三次上机实验项目四
  6. 将一个数组中不重复_你不知道的解法:数组中重复的数字
  7. Linux openJDK执行javac编译java文件提示command not found
  8. flume数据采集_大数据采集系统Flume集群部署
  9. python十进制转换_Python进制转换
  10. java String对象转Base64