您的位置:首页 > 其它

hdu 4433—— locker

2013-10-16 22:49 302 查看
动态规划

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define INF 1100000
char s1[1100],s2[1100];
int a[1100],b[1100],n;
int dp[1100][10][10];
void deal()
{
for(int i=1;i<=n;i++)
a[i]=s1[i-1]-'0';
for(int i=1;i<=n;i++)
b[i]=s2[i-1]-'0';
}
int dfs(int ii,int xx,int yy )
{
if(ii<=1)
return min((a[1]-yy+20)%10,(yy-a[1]+20)%10);
if(dp[ii][xx][yy]!=-1)
return dp[ii][xx][yy];
dp[ii][xx][yy]=INF;
int up=(yy-a[ii]+20)%10;
for(int i=0;i<=up;i++)
for(int j=0;j<=i;j++)
dp[ii][xx][yy]=min(dp[ii][xx][yy],
dfs(ii-1,(b[ii-2]-j+20)%10,(xx-i+20)%10)+up);
int down=10-up;
for(int i=0;i<=down;i++)
for(int j=0;j<=i;j++)
dp[ii][xx][yy]=min(dp[ii][xx][yy],
dfs(ii-1,(b[ii-2]+j+20)%10,(xx+i+20)%10)+down);
return dp[ii][xx][yy];
}
int main()
{
while(cin>>s1>>s2)
{
n=strlen(s1);
deal();
memset(dp,-1,sizeof(dp));
printf("%d\n",dfs(n,b[n-1],b
));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: