题意:

给你一串密码,每次我们可以转动1-3个数字,求转出最终答案的最小步数

思路:
感觉自己好坑,最开始想的是dp[cur][t1][t2][t3]也就是t1的位置以及连续的三个数的状态
但是卡死循环了,于是乎改成dp[cur][t1][t2](当前的位置以及它后面的数的状态)
每次求出当前位置转到正确答案时要的步数,然后枚举3种情况(也就是后面两个数是否一起转动)
但是中途发现思路有问题,111  -->  322 这种它会给出答案三,然而应该是2
(感觉最近课真的多,还要考试- -,都没时间做题)

通过上面那个例子发现,当前位置并不是一次旋转到正确答案是最优解(感觉思考问题是太片面了)
可能自己选转几格,再带动后面两个转动,322 -> 222 -> 111
所以对于后两个的可能枚举0 --> t(t为转动到正确答案的步数)
而且t2转动的步数≥a[cur+2]步数,因为第三个位置转动的前提便是t2转动
所以得出个循环,然后记忆化搜索

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <vector>
#include <algorithm>
#include <functional> using namespace std;
const int maxn = 1005;
const int INF = 0x3f3f3f3f;
char str1[maxn];
char str2[maxn];
int a[maxn];
int b[maxn];
int dp[maxn][10][10];
int len; int up(int s,int t) //上旋
{ if(s >= t)
return s-t;
else
return (s-t+10)%10;
} int down(int s,int t) //下旋
{ if(t >= s)
return t-s;
else
return (t-s+10)%10;
} int DFS(int cur,int t1,int t2)
{
if(cur >= len)
return 0;
if(dp[cur][t1][t2] != -1)
return dp[cur][t1][t2];
int t = up(b[cur],t1);
int ans = INF; for(int i = 0; i <=t; i++) //枚举后个数的情况
for(int j = i; j <= t; j++)
{
ans = min(ans,DFS(cur+1,(t2+j)%10,(a[cur+2]+i)%10) + t);
} t = down(b[cur],t1);
for(int i = 0; i <=t; i++)
for(int j = i; j <= t; j++)
{
ans = min(ans,DFS(cur+1,(t2-j+10)%10,(a[cur+2]-i+10)%10) +t);
}
return dp[cur][t1][t2] = ans;
} int main()
{
while(scanf("%s%s",str1,str2) != EOF)
{
len= strlen(str1);
for(int i = 0; i < len; i++)
{
a[i] = str1[i] - '0';
b[i] = str2[i] - '0';
}
a[len] = a[len+1] = b[len] = b[len+1] = 0;
memset(dp,-1,sizeof(dp));
printf("%d\n",DFS(0,a[0],a[1]));
}
return 0;
}

  

习题9-8 uva1631的更多相关文章

  1. Sharepoint学习笔记—习题系列--70-576习题解析 --索引目录

        Sharepoint学习笔记—习题系列--70-576习题解析  为便于查阅,这里整理并列出了70-576习题解析系列的所有问题,有些内容可能会在以后更新. 需要事先申明的是:     1. ...

  2. 《python核心编》程课后习题——第三章

    核心编程课后习题——第三章 3-1 由于Python是动态的,解释性的语言,对象的类型和内存都是运行时确定的,所以无需再使用之前对变量名和变量类型进行申明 3-2原因同上,Python的类型检查是在运 ...

  3. 习题 5: 更多的变量和打印 | 笨办法学 Python

    一. 简述 “格式化字符串(format string)” -  每一次你使用 ' ’ 或 " " 把一些文本引用起来,你就建立了一个字符串. 字符串是程序将信息展示给人的方式. ...

  4. 【WebGoat习题解析】Parameter Tampering->Bypass HTML Field Restrictions

    The form below uses HTML form field restrictions. In order to pass this lesson, submit the form with ...

  5. python核心编程(第二版)习题

    重新再看一遍python核心编程,把后面的习题都做一下.

  6. SQL简单语句总结习题

    创建一个表记员工个人信息: --创建一个表 create table plspl_company_info( empno ) not null, ename ) not null, job ), ma ...

  7. 《Python核心编程》部分代码习题实践(持续更新)

    第三章 3-10 交换异常处理方式 代码: #makeTextFile.py #!/usr/bin/env python 'makeTextFile.py' import os ls = os.lin ...

  8. web实验指导书和课后习题参考答案

    实验指导书 :http://course.baidu.com/view/daf55bd026fff705cc170add.html 课后习题参考答案:http://wenku.baidu.com/li ...

  9. 《C++primer》v5 第1章 开始 读书笔记 习题答案

    从今天开始在博客里写C++primer的文字.主要以后面的习题作业为主,会有必要的知识点补充. 本人也是菜鸟,可能有不对之处,还望指出. 前期内容可能会比较水. 1.1略 1.2略 1.3 cin和c ...

随机推荐

  1. nyoj 黑色帽子

    黑色帽子 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述         最近发现了一个搞笑的游戏,不过目前还没玩过.一个舞会上,每个人头上都戴着一顶帽子,帽子只有黑 ...

  2. JAVA_SE基础——69.Date类

    package cn.itcast.other; import java.text.ParseException; import java.text.SimpleDateFormat; import ...

  3. vue-cli项目中,全局引入jquery

    命令行执行 npm install --save jquery 找到webpack.base.conf.js文件,写入代码: const webpack = require('webpack') 在m ...

  4. js jquery 获取元素(父节点,子节点,兄弟节点),元素筛选

    转载:https://www.cnblogs.com/ooo0/p/6278102.html js jquery 获取元素(父节点,子节点,兄弟节点) 一,js 获取元素(父节点,子节点,兄弟节点) ...

  5. Linux命令(持续更新中)

    命令名 用法 安装上传下载 yum install lrzsz   rz上传文件,sz下载文件 压缩 解压文件 tar -zxvf  文件名 压缩文件 tar -zcvf 文件名 删除非空目录: rm ...

  6. ejs注释问题

    项目中遇到一个问题: 代码如下: 但是代码如下时,却不会出现bug: bug的导火索是ejs的注释: 因为我没有用对注释,所以被注释部分的if语句仍旧生效了. bug的根本原因是没有对mod类型进行判 ...

  7. 判断一个字符串是不是一个合法的IP地址

    最近在笔试的时候遇到碰一道算法题, 要求判断一个字符串是不是合法的ip地址. 将我的思路发出来分享一下,不一定正确,也不一定是最优的方法.希望能分享一些交流 要求用java或者c来实现,我的java代 ...

  8. Ubuntu+apt-get update时的源

    源是通过 /etc/apt/sources.list # file /etc/apt/sources.list.d # dir 来确定的, 只要将其中的相应文件/相应行删除了, 在apt-get up ...

  9. 数据库性能优化(database tuning)性能优化绝不仅仅只是索引

    一毕业就接触优化方面的问题,专业做优化也有至少5年之多的时间了,可现在还是经常听到很多人认为优化很简单,就是建索引的问题,这确实不能怪大家,做这行20多年的时间里,在职业生涯的每个阶段,几乎都能听到这 ...

  10. .NET面试资料整理

    1.WCF和Web Api的区别答:1WCF是.NET平台开发的一站式框架,Web Api的设计和构建只考虑一件事情,那就是Http,而WCF的设计主要考虑是SOAP和WS-*:Web Api非常轻量 ...