习题9-8 uva1631
题意:
给你一串密码,每次我们可以转动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的更多相关文章
- Sharepoint学习笔记—习题系列--70-576习题解析 --索引目录
		Sharepoint学习笔记—习题系列--70-576习题解析 为便于查阅,这里整理并列出了70-576习题解析系列的所有问题,有些内容可能会在以后更新. 需要事先申明的是: 1. ... 
- 《python核心编》程课后习题——第三章
		核心编程课后习题——第三章 3-1 由于Python是动态的,解释性的语言,对象的类型和内存都是运行时确定的,所以无需再使用之前对变量名和变量类型进行申明 3-2原因同上,Python的类型检查是在运 ... 
- 习题 5: 更多的变量和打印 | 笨办法学 Python
		一. 简述 “格式化字符串(format string)” - 每一次你使用 ' ’ 或 " " 把一些文本引用起来,你就建立了一个字符串. 字符串是程序将信息展示给人的方式. ... 
- 【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 ... 
- python核心编程(第二版)习题
		重新再看一遍python核心编程,把后面的习题都做一下. 
- SQL简单语句总结习题
		创建一个表记员工个人信息: --创建一个表 create table plspl_company_info( empno ) not null, ename ) not null, job ), ma ... 
- 《Python核心编程》部分代码习题实践(持续更新)
		第三章 3-10 交换异常处理方式 代码: #makeTextFile.py #!/usr/bin/env python 'makeTextFile.py' import os ls = os.lin ... 
- web实验指导书和课后习题参考答案
		实验指导书 :http://course.baidu.com/view/daf55bd026fff705cc170add.html 课后习题参考答案:http://wenku.baidu.com/li ... 
- 《C++primer》v5  第1章 开始 读书笔记 习题答案
		从今天开始在博客里写C++primer的文字.主要以后面的习题作业为主,会有必要的知识点补充. 本人也是菜鸟,可能有不对之处,还望指出. 前期内容可能会比较水. 1.1略 1.2略 1.3 cin和c ... 
随机推荐
- 20145237 实验五《Java网络编程》
			20145237 实验五<Java网络编程> 一.实验内容 •1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: •2.利用加解密代码包,编译运行代码,一人加密,一人解密: •3 ... 
- Flask 学习 十五 性能
			记录影响性能的数据库查询 app/main/views.py from flask_sqlalchemy import get_debug_queries @main.after_app_reques ... 
- caffe使用ctrl-c不能保存模型
			caffe使用Ctrl-c 不能保存模型: 是因为使用的是 tee输出日志 解决方法:kill -s SIGINT <proc_id> 或者使用 GLOG_log_dir=/path/to ... 
- MongoDB启动客户端和服务端
			要在MongoDB安装(我安装在D盘)的目录的根目录下,先建data目录,然后data目录下再建db目录(结果:D:\data\db). 然后cmd进入bin目录,执行.\mongod.exe启动服务 ... 
- linux下面根据不同的日期创建不同文件,一般用户数据库的备份的shell编程
			[root@www scripts]# vi sh03.sh #!/bin/bash # Program: # Program creates three files, which named by ... 
- 关于kali linux 2.0的vmware tools的安装问题
			在安装好kali linux 2.0 后,首先要做的就是添加源并更新系统,否则会出现软件定位问题. 在kali 2.0中,vmware tools已经不能使用了,官方放了一个工具下载安装就好. 添加源 ... 
- 第三章	JavaScript操作BOM对象
			第三章 JavaScript操作BOM对象 一.window对象 浏览器对象模型(BOM)是javascript的组成之一,它提供了独立与浏览器窗口进行交换的对象,使用浏览器对象模型可以实现与HT ... 
- cookieUtil
			public class CookieUtil { /** * 设置cookie * @param name cookie名字 * @param value cookie值 * @param maxA ... 
- ASP.NET Web API编程——模型验证与绑定
			1.模型验证 使用特性约束模型属性 可以使用System.ComponentModel.DataAnnotations提供的特性来限制模型. 例如,Required特性表示字段值不能为空,Range特 ... 
- Docker学习笔记 - 创建私有的镜像仓库
			一.查找镜像仓库 https://hub.docker.com/ 二.下载镜像仓库 docker pull registry:2.6.2 三.安装镜像仓库 docker run -d -p 6000: ... 
