题意: 找出一条路, 使每个节点相乘,得到的数末尾 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的更多相关文章

  1. Codeforces #2B The least round way(DP)

    Description 有一个n*n的正整数矩阵,要你求一条从第一行第一列的格子到第n行第n列的路,使得你走过的格子里面的数乘起来的值末尾的零的个数最小.输出最小个数. Input 第一行包括1个数n ...

  2. codeforces 2B The least round way(DP+数学)

    The least round way 题目链接:http://codeforces.com/contest/2/problem/B ——每天在线,欢迎留言谈论.PS.本题有什么想法.建议.疑问 欢迎 ...

  3. CF 2B.The least round way

    题目链接 很久以前就见过此题,以前看了题解,然后今天写了写,写的真搓. #include <cstdio> #include <cstring> #include <st ...

  4. [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 ...

  5. codeforces 2B The least round way 【DP】

    VJ上可找到中文题意. 思路: 首先分解有多少2与多少5.接下来就是dp. 分两次,一次是根据2的数量贪心,另外一次是根据5的数量贪心,看哪一次乘积的末尾0最少. 需要注意的是两点: 1.输入有0的情 ...

  6. CF 375C Circling Round Treasures [DP(spfa) 状压 射线法]

    C - Circling Round Treasures 题意: 在一个$n*m$的地图上,有一些障碍,还有a个宝箱和b个炸弹.你从(sx,sy)出发,走四连通的格子.你需要走一条闭合的路径,可以自交 ...

  7. Codeforces 2B The least round way(dp求最小末尾0)

    题目链接:http://codeforces.com/problemset/problem/2/B 题目大意: 给你一个nxn的矩形,找到一条从左上角到右下角的路径,使得该路径上所有数字的乘积的末尾0 ...

  8. CF #374 (Div. 2) C. Journey dp

    1.CF #374 (Div. 2)    C.  Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...

  9. 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 ...

随机推荐

  1. Ajax和Json实现自动补全

    1.index.jsp <%@ page language="java" import="java.util.*" pageEncoding=" ...

  2. HanLP用户自定义词典源码分析

    HanLP用户自定义词典源码分析 1. 官方文档及参考链接 关于词典问题Issue,首先参考:FAQ 自定义词典其实是基于规则的分词,它的用法参考这个issue 如果有些数量词.字母词需要分词,可参考 ...

  3. 开源框架.netCore DncZeus学习(五)下拉树的实现

    千里之行,始于足下,先从一个小功能研究起,在菜单管理页面有一个下拉树,先研究下它怎么实现的 1.先找到menu.vue页面 惯性思维先搜索请选择三个字,原来是动态生成的 再向上找DropDown组件, ...

  4. sql server中的merge

    http://www.cnblogs.com/CareySon/archive/2012/03/07/2383690.html 简介 Merge关键字是一个神奇的DML关键字.它在SQL Server ...

  5. PHP获取表单并使用数组存储 疯狂提示 Notice: Undefined offset

    $answer=array(); $answer[0]='0'; for($i=1;$i<=$QUESTION_COUNT;$i++){ $answer[$i]=$_POST[(string)$ ...

  6. Linux 常用命令(2)

    wc命令:用于对文件的行数.单词数和字符数进行统计. wc -w file.txt,显示文件中的单词数,wc -l file.txt,显示文件中的行数,wc -m file.txt,显示文件中的字符数 ...

  7. Understanding a project which include NodeJS, Webpack, Vue

    公司有一个web 项目是用 Vue 写的, 前段时间负责这个tool的人离职了没有人维护,其他人又很忙,我就去看了一下以便以后能加一些新功能在上面 没有接触过Vue, 这些理解了一下关系做一些学习记录 ...

  8. python面向对象和面向过程介绍与区别

    一.面向对象和面向过程的区别: a.面向过程: 1)根据业务逻辑从上到下写代码 2)开发思路是将数据和函数按照执行的逻辑顺序组织在一起 3)分开考虑数据与函数 定义性文字: 面向对象编程(Object ...

  9. Centos 04 基础系统优化命令

    在Linux这个系统当中,几乎所有的硬件设备文件都在/dev这个目录内.举例来说,IDE介面的硬盘的文件名称即为/dev/hd[a-d],其中, 括号内的字母为a-d当中的任意一个,亦即有/dev/h ...

  10. CentOS6.8合并DVD1和DVD2作为本地yum源

    转载自:http://www.study365.org/blog/45.html CentOS一般都会提供DVD1和DVD2两个镜像文件,形如CentOS-6.8-x86_64-bin-DVD1.is ...