题目

CF2B The least round way

做法

后面\(0\)的个数,\(2\)和\(5\)是\(10\)分解质因数

则把方格中的每个数分解成\(2\)和\(5\),对\(2\)和\(5\)求两边动规,得出最小值\(ans=min(num_2,num_5)\)

我们贪心地选择最小值所对应的\(2\)或\(5\),然后从\((n,n)\)按动规路径返回

Code

#include<bits/stdc++.h>
typedef int LL;
const LL maxn=1e3+9;
inline LL Read(){
LL x(0),f(1); char c=getchar();
while(c<'0' || c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0' && c<='9'){
x=(x<<3)+(x<<1)+c-'0'; c=getchar();
}return x*f;
}
LL n,m,ax,ay,flag;
LL p[2][maxn][maxn],dp[2][maxn][maxn],a[maxn][maxn];
void Solve(LL x,LL y,LL op){
if(x==1 && y==1) ;
else if(x==1){
Solve(x,y-1,op); printf("R");
}else if(y==1){
Solve(x-1,y,op); printf("D");
}else{
if(dp[op][x][y-1]==dp[op][x][y]-p[op][x][y]) Solve(x,y-1,op),printf("R");
else Solve(x-1,y,op),printf("D");
}
}
int main(){
n=m=Read();
for(LL i=1;i<=n;++i)
for(LL j=1;j<=m;++j){
a[i][j]=Read();
if(!a[i][j]){
ax=i; ay=j;
flag=true;
}
while(a[i][j]%2==0 && a[i][j]){
++p[0][i][j]; a[i][j]/=2;
}
while(a[i][j]%5==0 && a[i][j]){
++p[1][i][j]; a[i][j]/=5;
}
}
for(LL i=1;i<=n;++i)
for(LL j=1;j<=m;++j){
if(i==1 && j==1){
dp[0][i][j]=p[0][i][j];
dp[1][i][j]=p[1][i][j];
}else{
if(i==1){
dp[0][i][j]=dp[0][i][j-1]+p[0][i][j];
dp[1][i][j]=dp[1][i][j-1]+p[1][i][j];
}else if(j==1){
dp[0][i][j]=dp[0][i-1][j]+p[0][i][j];
dp[1][i][j]=dp[1][i-1][j]+p[1][i][j];
}else{
dp[0][i][j]=std::min(dp[0][i-1][j],dp[0][i][j-1])+p[0][i][j];
dp[1][i][j]=std::min(dp[1][i-1][j],dp[1][i][j-1])+p[1][i][j];
}
}
}
LL ans(std::min(dp[0][n][m],dp[1][n][m]));
if(ans>1 && flag){
puts("1");
for(LL i=1;i<ax;++i) printf("D");
for(LL i=1;i<ay;++i) printf("R");
for(LL i=ax;i<n;++i) printf("D");
for(LL i=ay;i<m;++i) printf("R");
return 0;
}
printf("%d\n",ans);
if(ans==dp[0][n][m]){
Solve(n,m,0);
}else{
Solve(n,m,1);
}
return 0;
}

CF2B The least round way(贪心+动规)的更多相关文章

  1. vijos1431[noip2007]守望者的逃离(背包动规)

    描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者 在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这 个荒岛施咒,这座岛很快就会 ...

  2. - > 动规讲解基础讲解一——01背包(模板)

    作为动态规划的基础,01背包的思想在许多动规问题中会经常出现,so,熟练的掌握01背包的思路是极其重要的: 有n件物品,第i件物品(I = 1,2,3…n)的价值是vi, 重量是wi,我们有一个能承重 ...

  3. NOIP2013 提高组day2 2 花匠 动规 找拐点 树状数组

    花匠 描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致. 具体 ...

  4. 区间型动规--石子归并(Pascal)

    题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使 ...

  5. 【noip 2009】 乌龟棋 记忆化搜索&动规

    题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...

  6. XJOI1571爱心蜗牛【树形动规】

    爱心蜗牛 猫猫把嘴伸进池子里,正准备"吸"鱼吃,却听到门铃响了.猫猫擦了擦脸上的水,打开门一看,那人正是她的好朋友--川川.川川手里拿着一辆玩具汽车,对猫猫说:"这是我的 ...

  7. XJOI1657&Codevs1255搭积木【树状动规】

    搭积木 一种积木搭建方式,高为H的积木,最底层有M个积木,每一层的积木数是他的低一层的积木数+1或-1.总共有N个积木.(且每行积木数不超过10)比如上图N=13 H=6 M=2. 输入格式: 第一行 ...

  8. (动规 或 最短路)Help Jimmy(poj 1661)

    http://poj.org/problem?id=1661 Description "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的 ...

  9. POJ-1958 Strange Towers of Hanoi(线性动规)

    Strange Towers of Hanoi Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 2677 Accepted: 17 ...

随机推荐

  1. Go net/http 发送常见的 http 请求

    使用 golang 中的 net/http 包来发送和接收 http 请求 开启 web server 先实现一个简单的 http server,用来接收请求 package main import ...

  2. centos7上使用git clone出现问题

    centos 7  git clone时出现不支持协议版本的问题 unable to access 'https://github.com/baloonwj/TeamTalk.git/': Peer ...

  3. BASIS小问题汇总1

    try to start SAP system but failed 2019-04-04 Symptom: when i tried to start SAP system, using the c ...

  4. iPhone电话与短信相关代码小结

    关于iPhone上电话与短信相关功能,做一个简单总结: 使用公开SDK能实现的功能: (1)获取和操作通讯录.使用函数 ABAddressBookRequestAccessWithCompletion ...

  5. Java集合框架介绍。Java Collection Frameworks = JCF

    Java集合框架 = Java Collection Frameworks  = JCF . 为了方便理解,我画了一张思维脑图.

  6. 实现对MySQL数据库进行分库/分表备份(shell脚本)

    工作中,往往数据库备份是件非常重要的事情,毕竟数据就是金钱,就是生命!废话不多,下面介绍一下:如何实现对MySQL数据库进行分库备份(shell脚本) Mysq数据库dump备份/还原语法: mysq ...

  7. 五、DML操作汇总

    前言: DML(Data Manipulation Language)数据操作语言,以INSERT.UPDATE.DELETE三种指令为核心,分别代表插入.更新与删除,是必须要掌握的指令,DML和SQ ...

  8. Docker基础理论整理(精简)

    目录 一.什么是docker,docker的概念 二.docker中的镜像 三.docker中的容器 四.docker中的仓库 五.docker的网络通信 bridge模式 host模式 contai ...

  9. Python 虚拟空间的使用

    使用虚拟环境, 可以将当前项目所使用的依赖与电脑中其他 Python 项目的依赖区分开, 避免依赖版本不匹配带来的问题, 同时也可以防止项目依赖被不当更新. mkdir myproject cd my ...

  10. MongoDB简介,安装,增删改查

    MongoDB到底是什么鬼? 最近有太多的同学向我提起MongoDB,想要学习MongoDB,还不知道MongoDB到底是什么鬼,或者说,知道是数据库,知道是文件型数据库,但是不知道怎么来用 那么好, ...