CF 2B The least round way DP+Math
题意: 找出一条路, 使每个节点相乘,得到的数末尾 0 最少
每次移动只能向右或者向下, 找到后打印路径
///按照题目要求,就是找出一条从左上角到右下角中每个数含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 = + ;
LL Map[maxn][maxn];
LL Dp[maxn][maxn][];
char Step[maxn][maxn][];
stack<char> Mesure; int Factor(int Num, int Base) ///得到因子 2 和 5 的个数
{
if(Num == ) return ;
int ret = ;
while(Num % Base == )
{
ret++;
Num /= Base;
}
return ret;
} int main()
{
ios::sync_with_stdio(false);
cin.tie();
int n;
cin >> n;
bool Zero = false;
int Zero_Pos;
for(int i = ; i < n; ++i)
{
for(int j = ; j < n; ++j)
{
cin >> Map[i][j];
if(Map[i][j] == )
{
Zero = true;
Zero_Pos = i;
}
Dp[i][j][] = Factor(Map[i][j],);
Dp[i][j][] = Factor(Map[i][j],);
} } for(int i = ; i < n; ++i)
{
for(int j = ; j < n; ++j)
{
for(int k = ; k < ; ++k)
{
if(i == && j == ) continue;
if(i == )
{
Dp[i][j][k] += Dp[i][j-][k];
Step[i][j][k] = 'R';
}
else if(j == )
{
Dp[i][j][k] += Dp[i-][j][k];
Step[i][j][k] = 'D';
}
else
{
Dp[i][j][k] += min(Dp[i-][j][k],Dp[i][j-][k]);
Step[i][j][k] = Dp[i-][j][k] < Dp[i][j-][k] ? 'D' : 'R';
}
}
}
} if(min(Dp[n-][n-][],Dp[n-][n-][]) > && Zero)
{
printf("1\n");
for(int i = ; i < Zero_Pos; ++i) putchar('D');
for(int i = ; i < n-; ++i) putchar('R');
for(int i = Zero_Pos; i < n-; ++i) putchar('D');
//
}
else
{
printf("%d\n",min(Dp[n-][n-][],Dp[n-][n-][]));
int k = ;
k = Dp[n-][n-][] < Dp[n-][n-][] ? : ;
for(int i = n-, j = n-; i != || j != ; )
{
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 ;
}
CF 2B The least round way DP+Math的更多相关文章
- Codeforces #2B The least round way(DP)
Description 有一个n*n的正整数矩阵,要你求一条从第一行第一列的格子到第n行第n列的路,使得你走过的格子里面的数乘起来的值末尾的零的个数最小.输出最小个数. Input 第一行包括1个数n ...
- codeforces 2B The least round way(DP+数学)
The least round way 题目链接:http://codeforces.com/contest/2/problem/B ——每天在线,欢迎留言谈论.PS.本题有什么想法.建议.疑问 欢迎 ...
- CF 2B.The least round way
题目链接 很久以前就见过此题,以前看了题解,然后今天写了写,写的真搓. #include <cstdio> #include <cstring> #include <st ...
- [cf contest 893(edu round 33)] F - Subtree Minimum Query
[cf contest 893(edu round 33)] F - Subtree Minimum Query time limit per test 6 seconds memory limit ...
- codeforces 2B The least round way 【DP】
VJ上可找到中文题意. 思路: 首先分解有多少2与多少5.接下来就是dp. 分两次,一次是根据2的数量贪心,另外一次是根据5的数量贪心,看哪一次乘积的末尾0最少. 需要注意的是两点: 1.输入有0的情 ...
- CF 375C Circling Round Treasures [DP(spfa) 状压 射线法]
C - Circling Round Treasures 题意: 在一个$n*m$的地图上,有一些障碍,还有a个宝箱和b个炸弹.你从(sx,sy)出发,走四连通的格子.你需要走一条闭合的路径,可以自交 ...
- Codeforces 2B The least round way(dp求最小末尾0)
题目链接:http://codeforces.com/problemset/problem/2/B 题目大意: 给你一个nxn的矩形,找到一条从左上角到右下角的路径,使得该路径上所有数字的乘积的末尾0 ...
- CF #374 (Div. 2) C. Journey dp
1.CF #374 (Div. 2) C. Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...
- CF 148D. Bag of mice (可能性DP)
D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
随机推荐
- range和xrange的区别
range和xrange的区别 python3里面只有range,返回结果是一个生成器,官方文档是这样描述的 class range(object): """ range ...
- JAVA 线程池之Callable返回结果
本文介绍如何向线程池提交任务,并获得任务的执行结果.然后模拟 线程池中的线程在执行任务的过程中抛出异常时,该如何处理. 一,执行具体任务的线程类 要想 获得 线程的执行结果,需实现Callable接口 ...
- 万能五笔输入法"@相反
经过查找资料,发现是因为键盘使用的英国导致,改为美国解决,其他输入法没发现这个问题.
- office 2016 破解教程
骤: 下载安装包——>安装(断网状态)——>下载破解工具——>破解完成 1. 下载 office2016,大家进入下面的链接进行 http://pan.baidu.com/s/1mi ...
- treap基本操作
利用rand保持堆的特性 const int N=; int ls[N],rs[N],v[N],p[N],cnt[N],siz[N]; // 权值 优先级 inline void update(int ...
- mysql比较运算符和函数
mysql> SELECT 15 BETWEEN 1 AND 22;+---------------------+| 15 BETWEEN 1 AND 22 |+---------------- ...
- 高并发秒杀系统--mybatis整合技巧
mybatis实现DAO接口编码技巧 1.XML文件通过namespace命名空间关联接口类 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD ...
- rabbitMQ学习1:消息队列介绍与rabbitmq安装使用
1. 什么是消息队列 生活里的消息队列,如同邮局的邮箱, 如果没邮箱的话, 邮件必须找到邮件那个人,递给他,才玩完成,那这个任务会处理的很麻烦,很慢,效率很低 但是如果有了邮箱, 邮件直接丢给邮箱,用 ...
- c++ 回调函数封装
std::function<void(int a,int b)> ha; //函数封装 当成参数用callback std::bind(&fun1,this,std::plac ...
- webpack学习笔记——--save-dev和--save
--save-dev 是你开发时候依赖的东西,--save 是你发布之后还依赖的东西. dependencies是运行时(发布后)依赖,devDependencies是开发时的依赖 比如,你写 ES6 ...