BZOJ 1019 :[SHOI2008]汉诺塔(递推)
好吧蒟蒻还是看题解的
其实看到汉诺塔就该想到是递推了
设f[i][j]表示i个在j杆转移到另一个杆的次数 g[i][j]表示i个在j杆转移到那个杆上
可得 f[i][j]=f[i-1][j]+1+f[i-1][g[i-1][j]] g[i][j]=6-j-g[i-1][j] (g[i-1][g[i-1][j]]==6-j-g[i-1][j]) 或 f[i][j]=f[i-1][j]+1+f[i-1][g[i-1][j]]+1+f[i-1][j] g[i][j]=g[i-1][j] (g[i-1][g[i-1][j]]=j)
CODE:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
long long f[50][4];int g[50][4];
int getint(char c){
if (c=='A') return 1;
if (c=='B') return 2;
if (c=='C') return 3;
}
int main(){
int n;
scanf("%d",&n);
for (int i=1;i<=6;i++){
char c[3];
scanf("%s",c);
int t=getint(c[0]);
if (!g[1][t]) g[1][t]=getint(c[1]);
}
f[1][1]=f[1][2]=f[1][3]=1;
for (int i=2;i<=n;i++){
for (int j=1;j<=3;j++){
int y=g[i-1][j],z=6-j-g[i-1][j];;
if (g[i-1][y]==j) {g[i][j]=g[i-1][j];f[i][j]=f[i-1][j]+1+f[i-1][y]+1+f[i-1][j];}
else {g[i][j]=z;f[i][j]=f[i-1][j]+1+f[i-1][y];}
}
}
printf("%lld",f[n][1]);
return 0;
}
BZOJ 1019 :[SHOI2008]汉诺塔(递推)的更多相关文章
- BZOJ 1019: [SHOI2008]汉诺塔( dp )
dp(x, y)表示第x根柱子上y个盘子移开后到哪根柱子以及花费步数..然后根据汉诺塔原理去转移... ------------------------------------------------ ...
- BZOJ 1019: [SHOI2008]汉诺塔
Description 一个汉诺塔,给出了移动的优先顺序,问从A移到按照规则移到另一个柱子上的最少步数. 规则:小的在大的上面,每次不能移动上一次移动的,选择可行的优先级最高的. Sol DP. 倒着 ...
- 【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)
1019: [SHOI2008]汉诺塔 Description 汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成.一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一 ...
- 1019: [SHOI2008]汉诺塔
1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1495 Solved: 916[Submit][Status] ...
- 【BZOJ】1019: [SHOI2008]汉诺塔
http://www.lydsy.com/JudgeOnline/problem.php?id=1019 题意:汉诺塔规则,只不过盘子n<=30,终点在B柱或C柱,每一次移动要遵守规则:1.小的 ...
- Acwing-96-奇怪的汉诺塔(递推)
链接: https://www.acwing.com/problem/content/description/98/ 题意: 汉诺塔问题,条件如下: 1.这里有A.B.C和D四座塔. 2.这里有n个圆 ...
- 汉诺塔递推HDU2064
题意: 移动木头盘不能a到c,必须a到b到c. 问你移动次数. 假设将n层塔从A经B挪到C需要f[n]步.那么具体的移动过程可以这样看:将上面n-1层从A经B挪到C需要f[n-1]步,再将第n层从A挪 ...
- bzoj1019 / P4285 [SHOI2008]汉诺塔
P4285 [SHOI2008]汉诺塔 递推 题目给出了优先级,那么走法是唯一的. 我们用$0,1,2$代表$A,B,C$三个柱子 设$g[i][x]$为第$x$根柱子上的$i$个盘子,经过演变后最终 ...
- bzoj千题计划109:bzoj1019: [SHOI2008]汉诺塔
http://www.lydsy.com/JudgeOnline/problem.php?id=1019 题目中问步骤数,没说最少 可以大胆猜测移动方案唯一 (真的是唯一但不会证) 设f[i][j] ...
随机推荐
- NLPIR中文分词器的使用
一.普通java项目 (1)添加项目jar包 File -> Project Structure Libarries 添加jar包jna-4.0.0.jar (2)将Data文件夹复制到 ...
- css 之!important
主要是自己犯了个错误: 把 !important 放到了分号后面; 正确写法写法: .current{ background-color: #f1f1f1; border-left: 2px soli ...
- Centos7.2 编译安装PHP7
PHP7,编译安装: 环境:centos7.2 (注意:因为我用的nginx, 此配置参数没有考虑到apache,所以不合适需要用apache的朋友照搬过去运行,但是可以参考.) 直接下载P ...
- 公众号第三方平台开发-aes解密失败
公众号第三方平台开发-aes解密失败 问题:本地启动项目,配置域名,测试微信公众号,系统正常运行:将项目部署到测试环境执行同样的操作,系统报错,错误异常:aes解密失败..... 调试--寻找问题-- ...
- 【Xilinx-Petalinux学习】-01-开发环境搭建与PetaLinux的安装
开发环境 VMware12, Ubuntu 16.04 64 bit 在VMware中安装Ubuntu,用户名:xilinx-arm 密码:root step1: VMware Tools问题 不知道 ...
- iOS 之 时间格式与字符串转换
这个知识点涉及到三个类:NSDate.NSString,另外是一个最重要的类NSDateFormatter.它起到格式转换的作用,至于方法查看头文件就好了.时间格式注意下:yyyyMMddHHmmss
- Swift 动态创建提示框
var alert = UIAlertController(title: "", message: "", prefferedStyle: UIAlertCon ...
- Java经典案例之-判断质数(素数)
/** * 描述:任意输入两个数n,m(n<m)判断n-m之间有多少个素数,并输出所有素数. * 分析:素数即质数,除1和本身之外,不能被其他自然数整除的数. * 判断素数的方法为:用一个数分别 ...
- 【spoj LCS2】 Longest Common Substring II
http://www.spoj.com/problems/LCS2/ (题目链接) 题意 求多个串的最长公共子串 Solution 对其中一个串构造后缀自动机,然后其它串在上面跑匹配.对于每个串都可以 ...
- js原生设计模式——2面向对象编程之继承—new+call(this)组合式继承
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...