给定由非负整数组成的n×n 的正方形矩阵,你需要寻找一条路径:

以左上角为起点

每次只能向右或向下走

以右下角为终点 并且,如果我们把沿路遇到的数进行相乘,积应当是最小“round”,换句话说,应当以最小数目的0的结尾.

Solution

考虑到最终答案只取决于 \(2,5\) 因子数中最小的那一个,所以可以拆开考虑,然后就是一个朴素的最小和路径dp了

注意如果原矩阵中包含零,答案要和 \(1\) 取 min 一下

#include <bits/stdc++.h>
using namespace std; vector <int> pat;
int n,a[1005][1005],x[1005][1005],f[1005][1005],ans=1e+9; void solve(int p) {
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++){
a[i][j]=0;
int t=x[i][j];
while(t && t%p==0) t/=p, a[i][j]++;
}
}
memset(f,0x3f,sizeof f);
f[0][1]=0;
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
f[i][j]=min(f[i-1][j],f[i][j-1])+a[i][j];
}
}
/*for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) cout<<f[i][j]<<" ";
cout<<endl;
}*/
vector <int> v;
{
int p=n,q=n;
while(p!=1 && q!=1) {
int i=p, j=q;
if(f[i][j]==f[i-1][j]+a[i][j]) {
v.push_back(1); //cout<<"up";
--p;
}
else if(f[i][j]==f[i][j-1]+a[i][j]) {
v.push_back(0); //cout<<"left";
--q;
}
else cout<<"err";
}
while(p!=1) {
--p;
v.push_back(1);
}
while(q!=1) {
--q;
v.push_back(0);
}
reverse(v.begin(),v.end());
if(f[n][n]<ans) {
ans=f[n][n];
pat=v;
}
}
} int main() {
scanf("%d",&n);
int flag=0,posx,posy;
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
scanf("%d",&x[i][j]);
if(x[i][j]==0) flag=1,posx=i,posy=j;
}
}
solve(2);
solve(5);
if(ans>1 && flag) {
cout<<1<<endl;
for(int i=1;i<posx;i++) cout<<"D";
for(int i=1;i<posy;i++) cout<<"R";
for(int i=posx;i<n;i++) cout<<"D";
for(int i=posy;i<n;i++) cout<<"R";
return 0;
}
cout<<ans<<endl;
for(int i=0;i<pat.size();i++) {
cout<<(pat[i]?"D":"R");
}
}

[CF2B] The least round way - dp的更多相关文章

  1. CF2B The least round way(dp+记录路径)

    B. The least round way time limit per test 2 seconds memory limit per test 64 megabytes input standa ...

  2. CF2B The least round way(贪心+动规)

    题目 CF2B The least round way 做法 后面\(0\)的个数,\(2\)和\(5\)是\(10\)分解质因数 则把方格中的每个数分解成\(2\)和\(5\),对\(2\)和\(5 ...

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

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

  4. CF2B The least round way 题解

    都是泪呀...↑ 题目传送门 题意(直接复制了QWQ) 题目描述 给定由非负整数组成的\(n \times n\)的正方形矩阵,你需要寻找一条路径: 以左上角为起点, 每次只能向右或向下走, 以右下角 ...

  5. Codeforces Beta Round #2 B. The least round way dp

    B. The least round way 题目连接: http://www.codeforces.com/contest/2/problem/B Description There is a sq ...

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

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

  7. Codeforces Beta Round #2B(dp+数学)

    贡献了一列WA.. 数学很神奇啊 这个题的关键是怎么才能算尾0的个数 只能相乘 可以想一下所有一位数相乘 除0之外,只有2和5相乘才能得到0 当然那些本身带0的多位数 里面肯定含有多少尾0 就含有多少 ...

  8. Codeforces2B - The least round way(DP)

    题目大意 给定一个N*N的格子,每个格子里有一个非负数,要求你找出从左上角到右下角的一条路径,使得它满足路径上的格子里的数全部乘起来的积尾部0最少 题解 如果要产生0肯定是2*5得出来的,最终的乘积可 ...

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

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

随机推荐

  1. C#建立自己的测试用例系统

    引言 很多时候,需要对类中的方法进行一些测试,来判断是否能按要求输出预期的结果. C#提供了快速创建单元测试的方法,但单元测试不仅速度慢不方便,大量的单元测试还会拖慢项目的启动速度. 所以决定自己搞个 ...

  2. HTTPS原理及流程

    HTTPS为什么更安全:数据对称加密传出,对称密钥使用非对称加密协商. HTTPS就一定安全吗:不一定,如果用户在浏览器端执意访问证书可疑或过期的站点,就存在安全隐患. --- HTTPS实现原理:h ...

  3. JavaScript-其他设计模式

    其他设计模式 JavaScript 中不常用 对应不到经典场景 原型模式-行为型 clone 自己,生成一个新对象 java 默认有 clone 接口,不用自己实现 //'object.creat'用 ...

  4. [红日安全]Web安全Day1 - SQL注入实战攻防

    本文由红日安全成员: Aixic 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名 ...

  5. You are my great sunshine

    "何为孤寂?" "清风,艳日,无笑意." "可否具体?" "左拥,右抱,无情欲." "可否再具体?" ...

  6. C# WPF聊天界面(3/3)

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF聊天界面(3/3) 阅读导航 本文背景 代码实现 本文参考 1.本文背景 系列文章 ...

  7. Android实战项目——家庭记账本设计思路

    经过三周左右的Android学习,实感只有上手开发才能有所提高.在此打算做一个家庭记账APP,同时巩固一下学到的东西并且弥补漏洞. 概述 记账是自古以来人类必不可少的一件事,从古代的算盘,到手写账本, ...

  8. 防止或减少过拟合的方式(二)——Dropout

    当进行模型训练的时候,往往可能错过模型的最佳临界点,即当达到最大精度的时候再进行训练,测试集的精度会下降,这时候就会出现过拟合,如果能在其临界点处提前终止训练,就能得到表达力较强的模型,从而也避免了过 ...

  9. BZOJ #2506. calc [根号分治,莫队,二分]

    \(p\) 是个正常范围, \(\sqrt p <= 100\) 比较小,预处理出来 \(a_i % p == k\) 的位置,然后丢进去,最后询问的 \(p\) 如果大于 \(100\) 就莫 ...

  10. Python 一键安装全部依赖包

    使用 pip requirements.txt 用来记录项目所有的依赖包和版本号,只需要一个简单的 pip 命令就能完成. pip freeze > requirements.txt 生成的文件 ...