题意: 找出一条路, 使每个节点相乘,得到的数末尾 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. python--爬取豆瓣热门国产电视剧保存为文件

    # -*- coding: utf-8 -*- __author__ = 'Frank Li' import requests import json class HotSpider(object): ...

  2. Linux常用bash命令

    目录 bash命令 基础操作 export | whereis | which | clear 文件操作 ls | touch | cat | more | head | tail | mv | cp ...

  3. 自定义Tornado的session组件

    session和cookie的关系 cookie:保存在客户端浏览器上的键值对 session_id = "eyJ1c2VyX2luZm8iOiJ" session:保存在服务器上 ...

  4. 解决 Android Device Monitor 常见问题

    Ø  简介 什么是 Android Device Monitor,中文意思就是安卓设备监视器,用于管理安装设备(手机.模拟器)用的.下面列出 Android Device Monitor 常见的一些问 ...

  5. 【noip 2012】提高组Day1T3.开车旅行

    Description 小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市i 的海拔高度为Hi,城市i 和城市 ...

  6. tensorflow faster rann

    github 上大神的代码 https://github.com/endernewton/tf-faster-rcnn.git 在自己跑的过程中的问题: 1. 数据集的问题: 作者实现了 voc,co ...

  7. 通过Cookie统计上次网页访问时间

    servlet类: import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date; import ...

  8. linux 扩展根分区

    参考链接:  http://blog.51cto.com/lubcdc/1763133

  9. call 和 apply 的区别

    call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向.因为 JavaScript 的函数存在「定义时上下文」和「 ...

  10. 【Thymeleaf】Thymeleaf模板对html实时刷新

    解决方案 spring: thymeleaf: cache: false 修改完html代码后Ctrl+Shift+F9,重新编译即可刷新页面内容!