https://vjudge.net/problem/UVA-1631

题意:

有一个n位密码锁,每位都是0~9,可以循环旋转。每次可以让1~3个相邻数字同时往上或者往下转一格。输入初始状态和终止状态,问最少要转几次。

思路:

d[i][x][y][z]表示当前在复原第 i 位,当然前 i 位已经复原完毕,x代表第 i 位的数字,y代表第 i+1的数字, z代表第 i+2 的数字时的最少旋转次数。

每次我们需要复原第 i 位的数字,因为可以向上旋转和向下旋转2种方式,所以我们需要分别计算出向上和向下各需要旋转几下。接下来考虑 i+1 和 i+2 ,他们这两位可以跟着第 i 位一起旋转,也可以不旋转。所以我们需要枚举来讨论。但是,可以肯定的是,i+1 的旋转次数肯定是小于等于 i 的旋转次数的,同时,i+2 的旋转次数又是小于等于 i+1 的旋转次数的。

代码不难,就是一个记忆化搜索。

 #include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = + ;
const int INF = ; char s1[maxn], s2[maxn];
int a[maxn], b[maxn];
int d[maxn][][][];
int len; int dp(int cur, int x, int y, int z )
{
if (cur >= len) return ;
int& ans = d[cur][x][y][z];
if (ans!=-) return ans;
ans = INF; //向上旋转
int t;
if (x <= b[cur]) t = b[cur] - x;
else t = b[cur] + - x; for (int j = ; j <= t;j++)
for (int k = ; k <= j; k++)
ans = min(ans, dp(cur + , (y + j) % , (z + k) % , a[cur+] ) + t); //向下旋转
if (x >= b[cur]) t = x - b[cur];
else t=x + - b[cur];
for (int j = ; j <= t; j++)
for (int k = ; k <= j; k++)
ans = min(ans, dp(cur + , (y - j + ) % , (z - k + ) % , a[cur+] )+t); return ans;
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (cin >> s1 >> s2)
{
memset(d, -, sizeof(d));
len = strlen(s1);
for (int i = ; i < len; i++)
{
a[i] = s1[i] - '';
b[i] = s2[i] - '';
}
a[len] = a[len + ] = b[len] = b[len + ] = ;
cout << dp(, a[], a[],a[]) << endl;
}
return ;
}

UVa 1631 密码锁的更多相关文章

  1. UVA - 1631 Locker(密码锁)(dp---记忆化搜索)

    题意:有一个n(n<=1000)位密码锁,每位都是0~9,可以循环旋转.每次可以让1~3个相邻数字同时往上或者往下转一格.输入初始状态和终止状态(长度不超过1000),问最少要转几次. 分析: ...

  2. uva 1631

    1631 Locker A password locker with N digits, each digit can be rotated to 0-9 circularly. You can ro ...

  3. UVa 1631 Locker (DP)

    题意:有一个 n 位密码锁,每位都是0-9,可以循环旋转.同时可以让1-3个相邻数字进行旋转一个,给定初始状态和目状态,问你最少要转多少次. 析:很明显的一个DP题.dp[i][j][k] 表示前 i ...

  4. 【Uva 1631】Locker

    [Link]: [Description] 有一个n(n≤1000)位密码锁,每位都是0-9,可以循环旋转.每次可以让1-3个相邻 数字同时往上或者往下转一格.例如,567890->567901 ...

  5. UVA - 1631 Locker 记忆化搜索

    题意:给定两个密码串,每次可以让1~3个相邻的密码向上或者向下滚动,每个密码是 ,问最少需要多少次滚动可以让原串成为目标串? 思路:假设当前要让第i位密码还原,我们可以同时转动,不同的转动方式会影响后 ...

  6. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  7. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  8. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  9. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

随机推荐

  1. mathType插入公式编号,及对公式编号的字体进行修改。调整公式上下间距。

    一:插入 公式编号. 1:首先设置公式格式.点击 mathtype>insert number >format 2:有简单格式和 高级格式:              https://we ...

  2. application实例

    application详解及实例 application对象用来在多个程序或者是多个用户之间共享数据,用户使用的所有application对象都是一样的,这与session对象不同.服务器一旦启动,就 ...

  3. iOS UI基础-6.0 UIActionSheet的使用

    UIActionSheet是在iOS弹出的选择按钮项,可以添加多项,并为每项添加点击事件. 使用 1.需要实现UIActionSheetDelegate  协议 @interface NJWisdom ...

  4. Fortran入门:Windows平台的Fortran编译器安装和使用

    因为课程需要,今年开始学习FORTRAN语言.之前学校的计算概论用的是C,后来又学了C++和Python作为面向对象的工具,数值计算方面主要通过学校的许可证用的MATLAB.因为专业侧重数值模拟和反演 ...

  5. Summary: Stack Overflow Error

    What is a stack overflow error? Parameters and local variables are allocated on the stack (with refe ...

  6. CSS中 Zoom属性

    CSS中 Zoom属性 其实Zoom属性是IE浏览器的专有属性,Firefox等浏览器不支撑.它可以设置或检索对象的缩放比例.除此之外,它还有其他一些小感化,比如触发ie的hasLayout属性,清除 ...

  7. liferay项目经验之BasePortlet

    package com.ebizwindow.crm.portlet.base; import java.io.IOException; import java.io.InputStream; imp ...

  8. yii2 restful api——app接口编程实例

    <?php namespace common\components; use common\models\Cart; use common\models\User; use Yii; use y ...

  9. 20155333 2016-2017-2 《Java程序设计》第九周学习总结

    20155333 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC(Java DataBase Connectivity) 驱动的四种类型 JDBC- ...

  10. 关于安装VS2010过程中的错误

    下午本来安装好了VS:但是后来由于自己更新太多功能:直接使得VS太卡打不开:卸载重装:但是卸载的时候在“开始”里面的帮助文档和一些目录在卸载项里面没有:而在“开始"菜单就有:所以我索性把整个 ...