CF 2B The least round way DP+Math
每次移动只能向右或者向下, 找到后打印路径
///按照题目要求,就是找出一条从左上角到右下角中每个数含2 or 5 最少的路 ///可以用Dp的思想, 然后把每个节点该走的方向记下来 ///再从终点回溯,把路径存入栈,再输出 ///数据会有0的情况, 这时候我们应该记录离终点最近的0 #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef unsigned long long ULL; const int maxn = 1000 + 7; LL Map[maxn][maxn]; LL Dp[maxn][maxn][2]; char Step[maxn][maxn][2]; stack<char> Mesure;int Factor(int Num, int Base) ///得到因子 2 和 5 的个数 {if(Num == 0) return 1;int ret = 0;while(Num % Base == 0){ret++;Num /= Base;}return ret; }int main() {ios::sync_with_stdio(false);cin.tie(0);int n;cin >> n;bool Zero = false;int Zero_Pos;for(int i = 0; i < n; ++i){for(int j = 0; j < n; ++j){cin >> Map[i][j];if(Map[i][j] == 0){Zero = true;Zero_Pos = i;}Dp[i][j][0] = Factor(Map[i][j],2);Dp[i][j][1] = Factor(Map[i][j],5);}}for(int i = 0; i < n; ++i){for(int j = 0; j < n; ++j){for(int k = 0; k < 2; ++k){if(i == 0 && j == 0) continue;if(i == 0){Dp[i][j][k] += Dp[i][j-1][k];Step[i][j][k] = 'R';}else if(j == 0){Dp[i][j][k] += Dp[i-1][j][k];Step[i][j][k] = 'D';}else{Dp[i][j][k] += min(Dp[i-1][j][k],Dp[i][j-1][k]);Step[i][j][k] = Dp[i-1][j][k] < Dp[i][j-1][k] ? 'D' : 'R';}}}}if(min(Dp[n-1][n-1][0],Dp[n-1][n-1][1]) > 1 && Zero){printf("1\n");for(int i = 0; i < Zero_Pos; ++i) putchar('D');for(int i = 0; i < n-1; ++i) putchar('R');for(int i = Zero_Pos; i < n-1; ++i) putchar('D');// }else{printf("%d\n",min(Dp[n-1][n-1][0],Dp[n-1][n-1][1]));int k = 0;k = Dp[n-1][n-1][0] < Dp[n-1][n-1][1] ? 0 : 1;for(int i = n-1, j = n-1; i != 0|| j != 0; ){Mesure.push(Step[i][j][k]);if(Step[i][j][k] == 'D') i--;else j--;}while( !Mesure.empty() ) putchar(Mesure.top()), Mesure.pop();}puts("");return 0; }
转载于:https://www.cnblogs.com/aoxuets/p/5506885.html
CF 2B The least round way DP+Math相关推荐
- CF 221 C Circling Round Treasures - dp - 状压
题目大意: 给你一张网个图,每个位置是空地.障碍.炸弹.宝藏.起点之一. 规划一条从其点出发不包含炸弹的闭合路线(回路),并可获得最大的利润. 利润定义为路线内部的宝藏收益(可能为负数)之和减去路径长 ...
- CF 2B.The least round way
题目链接 很久以前就见过此题,以前看了题解,然后今天写了写,写的真搓. 1 #include <cstdio> 2 #include <cstring> 3 #include ...
- 【CF 149D】Coloring Brackets(dp)
[CF 149D]Coloring Brackets(dp) D. Coloring Brackets time limit per test 2 seconds memory limit per t ...
- Educational Codeforces Round 80 (Rated for Div. 2)SZU cf集训round2 C~E(dp,状压+二分,树状数组+逆向思维)
C. Two Arrays 题目大意:就是给定两个整数n和m.计算数组对的数量(a,b),使得: 1 .两个阵列的长度都等于m: 2 .每个数组的每个元素都是1到n(包括1和n)之间的整数: 从1到m ...
- CF 375C Circling Round Treasures [DP(spfa) 状压 射线法]
C - Circling Round Treasures 题意: 在一个$n*m$的地图上,有一些障碍,还有a个宝箱和b个炸弹.你从(sx,sy)出发,走四连通的格子.你需要走一条闭合的路径,可以自交 ...
- java math round小数_Java Math round() 使用方法及示例
Java Math round() 使用方法及示例 Java Math round()方法将指定的值四舍五入为最接近的int或long值,然后将其返回. 也就是说,1.2四舍五入为1,1.8四舍五入为 ...
- CodeForces - 2B The least round way
B. The least round way time limit per test2 seconds memory limit per test64 megabytes inputstandard ...
- java math round小数_Java——Math的round方法
代码如下,后面的注释是输出的结果 public static voidmain(String[] args) { System.out.println(Math.round(0.399));//0 S ...
- EXCEL的几个取整函数对比,int() round() ceiling() ceiling.math()等
1目标 我们处理EXCEL数据经常要遇到以下的需求 取整 取倍数 按任意数取倍数 2 简单取整函数 int() int()只能最简单取整,无任何参数 3 round() 四舍五入取整函数 & ...
最新文章
- OpenCV读写视频文件解析
- FloodFill算法详解及应用
- Android makefile
- oracle aia,[zz] What Are Oracle AIA, PIP and How Do They Work?
- 转:ReLU激活函数:简单之美
- 互联网行业不需要中年人,那些35岁离开BAT的人都去哪了?
- 课堂随笔01--进制转换
- SQL Server 2019 安装教程(详细免费,自定义安装)
- 实现Codeblock支持C99标准
- vista任务管理器_为什么我的Windows Vista资源管理器发送到菜单挂起或打开缓慢?...
- 经纬度格式转换-(互转 度转度分秒 度分秒转度……)
- 管理科学与运筹学(MS/OR)国际权威期刊
- Allegro铜皮动静态切换操作指导
- 命令行登陆北邮校园网
- OpenGL学习——入门篇 第三章 四个变换及模拟地球公转
- 查询每个部门工资最低的两个员工的编号,姓名,工资
- Altium 常用快捷键
- python打开docx出错_导入pythondocx时出错?
- ansys的kbc_ANSYS单调加载、滞回曲线
- 医药CRM解决方案,助力医药企业数字化转型
热门文章
- c#中为datagrid添加下拉列表框
- 处理程序“WebServiceHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- ----移动端移动端调试神器vConsole----
- gitlab之gitlab-ci和gitlab-runner二
- eclipse 开发常见问题集锦
- .17-浅析webpack源码之compile流程-入口函数run
- 阿里云 centos oracle安装
- Okhttp----缓存的加入方式----附完整demo
- Android面试题目(10) 内存泄露
- Android 打包流程