HDU 4433 DP
题意
给1000个数字,每次可以转动1-3连续位,问从一个状态转到另一个状态最少需要多少步。
题解
比赛时候想复杂了,这道题跟BFS没有任何关系。不过还是有很多神牛用记忆化搜索过了。主要就是设计DP状态,网上有一种比较好想的状态,dp[i][j][k]代表第i个位置已经合法了,j代表第i+1个位置向上转动了j步,k代表第i+2个位置向上转动了k步。这样的话,我们就可以很轻松的进行状态转移。
注意事项
唯一需要特别注意的是在状态转移的过程中需要取模,因为操作之后会出现>=10以及<0的情况,需要进行取模处理。
代码
#include<bits/stdc++.h>
#define UP(i,l,h) for(int i=l;i<h;i++)
#define DOWN(i,h,l) for(int i=h-1;i>=l;i--)
#define W(t) while(t)
#define MEM(a,b) memset(a,b,sizeof(a))
#define LL long long
#define INF 0x3f3f3f3f
#define eps 1e-10
#define MAXN 1010
#define MOD 1000000007
#define COUT(x) cout<<x<<endl
using namespace std;
char s1[MAXN],s2[MAXN];
int i1[MAXN],i2[MAXN];
int dp[MAXN][15][15];
int main() {W(~scanf("%s%s",s1,s2)) {int len=strlen(s1);MEM(dp,INF);dp[0][0][0]=0;UP(k,0,len) {UP(i,0,10) {UP(j,0,10) {int up=(s2[k]-s1[k]-i+20)%10;
// COUT(k<<" "<<i<<" "<<j<<" "<<up);int down=10-up;
// COUT(up<<" "<<down);UP(p,0,up+1) {UP(q,0,p+1) {dp[k+1][(j+p)%10][q]=min(dp[k+1][(j+p)%10][q],dp[k][i][j]+up);}}UP(p,0,down+1) {UP(q,0,p+1) {dp[k+1][(j-p+10)%10][(10-q)%10]=min(dp[k+1][(j-p+10)%10][(10-q)%10],dp[k][i][j]+down);}}}
// COUT(k);}}printf("%d\n",dp[len][0][0]);}
}
HDU 4433 DP相关推荐
- HDU 5928 DP 凸包graham
给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也 ...
- hdu 1171 dp(多重背包)
View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...
- hdu 4433 locker(DP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4433 题目大意:就是给你一个序列,相当于一个可以转的那种密码锁的初始状态,0往下转是9,9往上转是0,现在 ...
- [HDU 4433]locker[DP]
题意: 给出密码做的现状和密码, 每次可以移动连续的最多3列, 向上或向下, 求将密码调出来所需要的最少步数. 思路: 首先应看出,恢复的过程中, 调每一位的时间顺序是不影响的, 不妨就从左到右一位位 ...
- UVA 1631 Locker(HDU 4433)(DP)
A password locker with N digits, each digit can be rotated to 0-9 circularly. You can rotate 1-3 con ...
- hdu 4433 locker
http://acm.hdu.edu.cn/showproblem.php?pid=4433 记忆化搜索+DP ans[x][f][ff]; 表示到a的第x位时 此位加f ,x-1位 加ff 的情况下 ...
- HDU 4832(DP+计数问题)
HDU 4832 Chess 思路:把行列的情况分别dp求出来,然后枚举行用几行.竖用几行,然后相乘累加起来就是答案 代码: #include <stdio.h> #include < ...
- hdu 5086(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5086 题目大意:给出长度为n的数组,然后要求累计里面的每个子串的和. 解题思路:这道题直接枚举肯定不行 ...
- hdu 2059(dp)
龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Des ...
最新文章
- task_struct源码
- 类型后面的问号的目的是什么(例如:int?myVariable)?
- 托管数据中心之间的PUE比较(下)
- 数据结构与算法 / 红黑树
- 为什么用 windbg 看 !address 显示出的Free是128T 大小?
- ubuntu+eclipse+svn
- 安卓软件错误log_关于android程序的log错误信息的问题,请明白人看下吧,我是初学者,新建的android项目,一个代码都没改过...
- catia利用宏批量改名的方法_谁有CATIA批量改名的宏程序啊
- Usually, these regular meetings do not have
- IT职业生涯中的必修课
- 北漂程序员,何以露宿街头?
- Java学习笔记目录索引 (持续更新中)
- 三组计算机局域网组网方案,多种方式组建家庭局域网
- 数据安全合规体系建设白皮书
- 深圳大学计算机系在哪个校区,2021年深圳大学有几个校区,大一新生在哪个校区...
- Nginx的 HTTP 499 状态码处理
- windbg挂代理下载pdb
- java后端微信小程序登录与注册
- 千里马android framework开发解决Accessing hidden method限制,让应用访问隐藏方法(需要可以修改系统源码方案)
- SWUST OJ#1052 输出利用先序遍历创建的二叉树中的指定结点的双亲结点
热门文章
- Qt 实现鼠标拖拽窗口移动
- php编程 地位,4月编程语言排行榜_4月编程语言排行榜:java地位无可撼动,Python跌出前三...
- shell调用spark不执行JAVA,当代码在Spark shell中工作时,spark-submit不能引用“--jars”指定的jar?...
- java怎么调用同包变量,Java并发包中的原子变量操作类
- html css加载不了_前端面试准备笔记之html和css(03)
- 视频画质增强器--v1.0
- 安卓市场上哪个便签好用 比较好用的便签软件推荐
- JPush极光消息推送APP-start
- echarts 柱状图形状修改成等腰三角形
- 【常用传感器】SW-420震动传感器原理及例程代码