HDU 4433 locker
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4433
这是一道2012年ACM天津赛区现场赛的题目,大意是给出两串数字,求用最少的转换次数将一串(A)变为另一串(B)。
转换规则是:可以将连续的1到3位数字都加一或者减一(0-9的数字是循环的,0减一变9,9加一变0)
本题的数字串的长度最大有1000,光用搜索是不行的了,正解是DP
DP[i][j][k]表示前i-2个数字与目的串的相同,且第i-1位为j , 第i 位为k 的最小变换次数。
那么状态的转移就是 DP[i][j][k]=min{DP[i-1][ X ][ Y ]+dis(A[i],K)} ,其中dis(A[i],K)表示从A[i]变为K所需的变化次数,不难知道变化可以往上变化,也可以往下变化,所以有两种情况;X表示在变化次数不超过dis(A[i],K)和Y的变化次数的情况下能变成B[i-2] 的数字,Y表示在变化次数不超过dis(A[i],K)的情况下能变成 J 的数字,X和Y都需要根据当前dis(A[i],K)的计算状态(向上向下)来定。
X、Y的变化次数有所限制,是以第i位的变化次数为标准,这样可以保证枚举到所有连续变化的情况,比如说234的次数和444的次数是一致的。对于每一位数都能找到一种满足这种条件的方案使得穷尽与这位和相临的2位的各种组合情况。
这题能用动态规划的关键是每次变化的数字位一定是连续的,这为无后效性和最优子结构提供支持。状态的转移比较麻烦。
代码:
#include <stdio.h>
#include <string.h>
char a[],b[];
int dp[][][];
bool ifv[][][];
inline int min(int a,int b){return a<b?a:b;}
void deal(char *p)
{
int n=strlen(p);
for (int i=;i<n;++i) p[i]-='';
}
int dps(int ii,int jj,int kk)
{
if (ii<) return min((kk-a[ii]+)%,(a[ii]-kk+)%);
if (ifv[ii][jj][kk]) return dp[ii][jj][kk];
ifv[ii][jj][kk]=true;
dp[ii][jj][kk]=;
int tem=(kk-a[ii]+)%;
for (int i=;i<=tem;++i)
for (int j=;j<=i;++j)
{
dp[ii][jj][kk]=min(dp[ii][jj][kk],dps(ii-,(b[ii-]-j+)%,(jj-i+)%)+tem);
}
tem=-tem;
for (int i=;i<=tem;++i)
for (int j=;j<=i;++j)
{
dp[ii][jj][kk]=min(dp[ii][jj][kk],dps(ii-,(b[ii-]+j)%,(jj+i)%)+tem);
}
return dp[ii][jj][kk];
}
int main()
{
//freopen("in.txt","r",stdin);
while (~scanf("%s%s",a,b))
{
memset(dp,,sizeof dp);
memset(ifv,,sizeof ifv);
int len=strlen(b);
deal(a);deal(b);
printf("%d\n",dps(len-,b[len-],b[len-]));
}
}
HDU 4433 locker的更多相关文章
- HDU 4433 locker(12年天津,DP)
4576 njczy2010 C Accepted 860 KB 140 ms G++ 2063 B 2014-10-16 09:51:19 哎,为啥1000*100*100的复杂度的dp就不敢敲了呢 ...
- HDU 4433 locker(DP)(2012 Asia Tianjin Regional Contest)
Problem Description A password locker with N digits, each digit can be rotated to 0-9 circularly.You ...
- HDU 4433 locker(SPFA+DP)
题目链接 去年区域赛的题目,早就看过题目了,又是过了好久了... 这题状态转移,一看就知道应该是 线性的那种,不过细节真的不好处理,一直没想出怎么搞,期间也看过题解,好像没太看懂... dp[i][j ...
- [HDU 4433]locker[DP]
题意: 给出密码做的现状和密码, 每次可以移动连续的最多3列, 向上或向下, 求将密码调出来所需要的最少步数. 思路: 首先应看出,恢复的过程中, 调每一位的时间顺序是不影响的, 不妨就从左到右一位位 ...
- HDU 4433 locker 2012 Asia Tianjin Regional Contest 减少国家DP
意甲冠军:给定的长度可达1000数的顺序,图像password像锁.可以上下滑动,同时会0-9周期. 每个操作.最多三个数字连续操作.现在给出的起始序列和靶序列,获得操作的最小数量,从起始序列与靶序列 ...
- hdu 4433
一道dp题,虽然知道是dp,但是不会做: 学习了ACM_cxlove大神的代码,终于明白了: 搬运工: dp[i][j][k]表示 前i个已经完全匹配,而这时候,第i+1个已经加了j位,第i+2位已经 ...
- dp hdu-4433 locker
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4433 题目大意: 给两个长度相等的数字串s1,s2.每次操作可以把连续的最多三位都+1或-1,如果超 ...
- hdu 6253 (bfs打表)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6253 题意: 马可以往一个方向走两步,然后转个弯走一步,这样算一次动作,求问马n次动作后,能到达多少个点, ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
随机推荐
- 我的github
我的github:先来贴个图~ 这是我的github,新建了第一个repository,默认路径是aokoqingiz/code. 然后是里面的文件~ 里面有一个readme.txt,是我对这个r ...
- 教程-在F9后提示内存错误,点击了乎略,之后怎么取消乎略?
问题现象:F9后,调试程序,提示内存错误,点击了“乎略”.之后再也没有出现错误了.可是想改这个BUG时,没法取消乎略了. 问题原因:在DLEPHI的选项中是这么一个地方是可以设置的. 问题处理:打开D ...
- HDU 5783 Divide the Sequence (贪心)
Divide the Sequence 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5783 Description Alice has a seq ...
- HDU 3072 Intelligence System (强连通分量)
Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Activex WindowsMediaPlayer控件主要方法属性
属性/方法名: 说明:[基本属性] URL:String; 指定媒体位置,本机或网络地址 uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisible pl ...
- WS103C8例程——串口2【worldsing笔记】
在超MINI核心板 stm32F103C8最小系统板上调试Usart2功能:用Jlink 6Pin接口连接WStm32f103c8的Uart2,PC机向mcu发送数据,mcu收到数据后数据加1,回传给 ...
- UVaLive 7371 Triangle (水题,判矩形)
题意:给定两个三角形,问你能不能拼成矩形. 析:很明显,要想是矩形,必须是四个角是直角,那么三角形必须是直角三角形,然后就是只能斜边相对,然后呢?就没了. 代码如下: #pragma comment( ...
- Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)
认识Blend Tree 我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下: 那么我们看下新创建的Blend Tree和State有什 ...
- CoordinatorLayout的简单应用(材料设计新控件)
CoordinatorLayout字面意思为:协调布局,一般作为根布局使用.关于这个布局,记录一下两个用法,备忘. 一.配合 FloatingActionBar 使用 <?xml version ...
- get_template_part() 函数详解备忘(转)
最近研究官方主题 Twenty Eleven ,有一些东西网上现成的中文资料不好找,在博客里记载下来,算是分享,也算是备忘,wordpress 3.0 以后就开始便有了get_template_par ...