2017.9.28 CF #R2 B 思考记录
题目大意:
给一个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 思考记录相关推荐
- 2017.9.30 CF #R4 D 思考记录
题意:给一个a*b 的方格 ,把他装到n个其他(>a*>b)的格子里,格子之间可以叠加放,求最多放几个格子+方案 .实际上是要找一个严格上升序列 所以直接排序消除后效性,dp即可 cf真喜 ...
- 2017.5.28 codeforce h题思考记录
并没有报codeforce 但有人想让我帮他看题,于是就做了 大概意思就是,给你200个空,让你在200个空中放字母, 再自己设计一个串,要求自己设计的这个串在这放着200个字母的串中作为子串出 ...
- 2017.10.5 最短母串 思考记录
这个题n<=15,可以用10表示选取情况下的最优值 预处理两个串之间的连接关系,然后枚举状态转移 然而这个题还要输出方案,,而且还不让你开空间. 所以只能记录前继动态判断.. 所以十分难写难调 ...
- 2017.9.26 块的计数 思考记录
这种题就属于那种描述很简单,要求很简单,但就是无从下手的题 这个题我只有n根n做法..枚举因数检验.. 首先对于任何块的大小,方案唯一,这是显然的,,如果划分位置改变1,一定有一个位置+1,一个位置- ...
- 2017.8.8 魔兽地图DotR 思考记录
假题害人.. 明明说了是一棵树,却还要强行加一组坑爹数据 所以网上的题解挂了好多 这题是很综合的树上背包问题. 由依赖关系转化为一些枚举来跑多重背包 由于是 "一棵树" 所以 ...
- 2017.3.25 魔术球问题 思考记录
这个题还是不难的..(想了20分钟就出完解) 二分+网络流检验,,能加在上面的数大的向小的连边 总点数-最大匹配>n :{l=mid+1, 记录答案 } else ...
- 2017.10.23 chess 中国象棋 思考记录
这种题的一般解法: 1. 发现状压可以搞,然后发现状态爆炸 2.考虑状态特点,一共只有几种可能的状态 3.考虑可不可以只对状态进行计数 4.离散统计贡献 码: #include<iostream ...
- 2017.10.19 起床困难综合征 思考记录
2333noi送分题 首先暴力试每个数有些二进制位是会重复算的,,所以就考虑能否把每个二进制位独立考虑 老性质:二进制运算每一位独立 所以二进制dp,如果这一位输入1,是多少,输入0,是多少 然后按二 ...
- 2017.10.11 network 网络扩容 思考记录
第一问是网络流. 第二问是费用流,但之前的边依然是可以用的,所以每个点决策:用原来的流量 购买一条流量,扫每条边加进去就可以了 然后限制流出为k 码: #include<iostream& ...
最新文章
- 5300亿NLP模型“威震天-图灵”发布,由4480块A100训练,微软英伟达联合出品
- 百度网络推广总结大家在做页面标题优化时需注意的事项!
- 瑞士的迷人风光(转)
- POJ 3660 Cow Contest【传递闭包】
- java 获取类方法_Java之反射机制三:获取类的方法
- Java 并发编程CountDownLatch的应用与源码解析
- SAP License:SAP Solution Manager中的常用命令
- SDWebImage之工具类
- jquery 全国 三联 地址选择
- 【HBase学习】Apache HBase项目简介
- 简明python教程:数据结构
- java访问出现500错误_java – URLConnection不允许我访问Http错误的数据(404,500等)
- 错误No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbala
- 华为服务器bios系统,华为服务器bios设置
- Objective-C文字换行方式(解决英文在行末时的换行问题)
- servlet的认识和了解(3)
- 2017年美国计算机科学,2017年U.S.News美国大学研究生计算机科学专业排名
- 共享平台如何提高财务的分账记账效率?
- 【C语言】实现求两个数的最大公约数【四种算法】
- dp光纤线与hdmi光纤线哪个比较好?
热门文章
- Django使用Python操作数据库 --Django 1.8.2 文档(中文)部分笔记
- 将任何变量的值进行二进制输出的方法
- day25 java的集合(2)collection
- python如何让图片镜像翻转_如何用 Python 增量备份 Roam Research 笔记图片?
- 一建管道工程122知识点_背诵的知识点是否边缘化?一建市政一本通+学霸笔记,教你只记重点...
- mysql数据库查询源码_超简单php mysql数据库查询类
- pythonsqlalchemy怎么看到返回的具体内容_sqlalchemy返回值总结
- git拉取tag代码_10年经验17张图带你进入gitflow企业项目代码版本管理的最佳实践...
- mysql叶子结点存储的什么_B+树叶子结点到底存储了什么?
- python tkinter画笑脸_python – 如何在tkinter窗口中绘制图像