The least round way CodeForces - 2B (DP 矩阵 路径)
题意:n * n的数字矩阵,只能向下走和向右走,要求走的数字的积的后面的0最少,求最少的0和路径之一
题解:0 的情况2 种 2 * 5 和乘以 0,记录每个数字分解的2 和 5 的数量,从左上角到右下角使用dp跑出来分别最少的2 和 5,2 和 5个数中少的那个就是答案,如果矩阵中有0就看跑出来的答案是否大于1即可,用g[][][]数组记录路径,dfs输出路径
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("*********\n") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e3 + 5; const int mod = 998244353;int f[MAXN][MAXN][2]; int g[MAXN][MAXN][2]; void dfs(int x,int y,int k) {if(x == 1 && y == 1) return;if(g[x][y][k]) {dfs(x - 1,y,k);putchar('D');} else {dfs(x, y - 1,k);putchar('R');} } int main() {int n,x = 0,k;scanf("%d",&n);memset(f,0,sizeof f);for(int i = 2; i <= n; i++)for(int id = 0; id < 2; id++)f[0][i][id] = f[i][0][id] = INF;for(int i = 1; i <= n; i++) {for(int j = 1; j <= n; j++) {scanf("%d",&k);if (k == 0) {x = i;} else {while (k % 2 == 0) {f[i][j][0]++;k /= 2;}while (k % 5 == 0) {f[i][j][1]++;k /= 5;}}for (int id = 0; id < 2; id++) {if (f[i - 1][j][id] < f[i][j - 1][id]) {g[i][j][id] = 1; //往下走f[i][j][id] += f[i - 1][j][id];} else {g[i][j][id] = 0; //往右走f[i][j][id] += f[i][j - 1][id];}} // debug(f[i][j][0]); // debug(f[i][j][1]); // debug(g[i][j][0]); // debug(g[i][j][1]); }}if(f[n][n][1] < f[n][n][0])k = 1;elsek = 0;if(x && f[n][n][1] > 1) {printf("1\n");for(int i = 2; i <= x; i++)putchar('D');for(int i = 2; i <= n; i++)putchar('R');for(int i = x + 1; i <= n; i++)putchar('D');} else { // debug(k);printf("%d\n",f[n][n][k]);dfs(n,n,k);}return 0; }
转载于:https://www.cnblogs.com/smallhester/p/11365429.html
The least round way CodeForces - 2B (DP 矩阵 路径)相关推荐
- Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】
题意: 有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k. 分 ...
- 【bzoj3329】Xorequ 数位dp+矩阵乘法
题目描述 输入 第一行一个正整数,表示数据组数据 ,接下来T行 每行一个正整数N 输出 2*T行 第2*i-1行表示第i个数据中问题一的解, 第2*i行表示第i个数据中问题二的解, 样例输入 1 1 ...
- agc013e Placing Squares(模型转化+dp+矩阵优化)
题目链接:agc013e Placing Squares 题目大意: 给你一个正整数序列S,长度为m,还有一个正整数n,S中元素升序且都小于n(1≤X1<X2<...<Xm≤n−1) ...
- 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs
http://nyoj.top/problem/1273 状压dp+矩阵快速幂+dfs 1273-宣传墙 内存限制:64MB 时间限制:1000ms 特判: No 通过数:19 提交数:64 难度:4 ...
- 状压搜索 Circling Round Treasures:CodeForces - 375C
题目:Circling Round Treasures:CodeForces - 375C 题意: 给你一个N*M的地图(N,M<=20),地图上'#'表示障碍物,'B'表示炸弹,数字表示宝藏( ...
- 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂
[题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...
- CodeForces - 2B The least round way
B. The least round way time limit per test2 seconds memory limit per test64 megabytes inputstandard ...
- Codeforces Beta Round #17 C. Balance DP
C. Balance 题目链接 http://codeforces.com/contest/17/problem/C 题面 Nick likes strings very much, he likes ...
- Product Oriented Recurrence(Codeforces Round #566 (Div. 2)E+矩阵快速幂+欧拉降幂)
传送门 题目 fn=c2∗n−6fn−1fn−2fn−3\begin{aligned} &f_n=c^{2*n-6}f_{n-1}f_{n-2}f_{n-3}&\\ \end{alig ...
最新文章
- linux执行python不打印_在Python中执行shell程序而不打印到屏幕
- init进程(即进程1,或者说linuxrc)的详解
- c语言用什么操作系统,用C语言写关于操作系统的一个问题。
- JavaScript中的Math方法演示
- Android常见的设计模式详解
- FinCEN就非托管加密钱包报告规则征集意见时间将截至今日12时59分
- 苹果官方将首次参与天猫 618 促销活动;淘宝回应用户账号被禁用980年;Julia 1.5.0 beta1 发布 | 极客头条...
- 为什么你的 JavaScript 代码如此冗长?!
- android 前后台,Android App前后台监控
- 米线店结账程序 装饰着模式_云南大学《设计模式》实验报告2_装饰者模式.doc...
- JAVA学子商城项目问题集锦(springboot)
- 带SN切换流程_贴片电阻生产工艺流程简介
- Android直播带货app源码——直播推流SDK
- mysql 如何避免间隙锁_mysql 间隙锁
- 在Total Commander下使用sftp操作服务器
- 小度智能音箱Pro全新登场,百度软硬件结合如何青出于蓝而胜于蓝?
- Spring Cloud中使用jib进行docker部署
- Strut2的工作流程
- Android和风SDK,Android 和风天气SDK获取天气
- c语言中常量有何作用,正确的C语言常量是什么?