HDU 2045:不容易系列之(3)—— LELE的RPG难题(动态规划)
一、原题链接
二、题面
人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题:
有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.
以上就是著名的RPG难题.
如果你是Cole,我想你一定会想尽办法帮助LELE解决这个问题的;如果不是,看在众多漂亮的痛不欲生的Cole女的面子上,你也不会袖手旁观吧?
三、示例
输入
输入数据包含多个测试实例,每个测试实例占一行,由一个整数N组成,(0<n<=50)。
1
2
输出
对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。
3
6
五、思路
动态规划使用条件
无后效性
将集合的表达定义为
arr[n]:n个方格的有效排列数有后效性:对于一个n格的有效排列,第n格的颜色不单要求与第n-1格不同,还要求与第一格不同
将集合的表达定义为
arr[n][i][j]:n个方格且第一个颜色为i最后一个颜色为j,故问题转换为了求n格方格且相邻两个颜色不同的可能数,在输出结果时仅输出两个不同颜色的结果之和注:增加维度本质还是分类讨论
最优子结构:由上,显然对于目标问题n个相邻颜色不同的方格排列,有子问题n-1个相邻颜色不同的方格排列必然成立
重复子问题:无
动态规划模型构建
集合表达
ans[55][3][3]- 第一维表示方格数
- 第二维表示起始颜色
- 第三维表示结束颜色
递推式:n个方格的排列可由n-1个方格推得
for(int i=2;i<=50;i++){
for(int j=0;j<3;j++){
ans[i][j][j]=ans[i-1][j][(j+1)%3]+ans[i-1][j][(j+2)%3];
ans[i][j][(j+1)%3]=ans[i-1][j][j]+ans[i-1][j][(j+2)%3];
ans[i][j][(j+2)%3]=ans[i-1][j][j]+ans[i-1][j][(j+1)%3];
}
}
初值确定:由递推式可知,只需知道1个方格的排列
for(int i=0;i<3;i++){
ans[1][i][i]=1;
}
六、code
#include <bits/stdc++.h>
#define PI 3.1415927
using namespace std;
typedef long long ll;
int main()
{
ll n,ans[55][3][3];
memset(ans,0,55*3*3*sizeof(ll));
//求n个相邻颜色不同的方格排列
for(int i=0;i<3;i++){
ans[1][i][i]=1;
}
for(int i=2;i<=50;i++){
for(int j=0;j<3;j++){
ans[i][j][j]=ans[i-1][j][(j+1)%3]+ans[i-1][j][(j+2)%3];
ans[i][j][(j+1)%3]=ans[i-1][j][j]+ans[i-1][j][(j+2)%3];
ans[i][j][(j+2)%3]=ans[i-1][j][j]+ans[i-1][j][(j+1)%3];
}
}
while(cin >> n){
//求n个相邻颜色不同且收尾颜色不同的方格排列
ll num=0;
for(int i=0;i<3;i++){
if(n==1){
num+=ans[n][i][i];
}
num+=ans[n][i][(i+1)%3];
num+=ans[n][i][(i+2)%3];
}
cout << num << endl;
}
return 0;
}
HDU 2045:不容易系列之(3)—— LELE的RPG难题(动态规划)的更多相关文章
- HDU 2045 不容易系列之(3)—— LELE的RPG难题(递归/动态规划)
不容易系列之(3)—— LELE的RPG难题 Problem Description 人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即" ...
- HDU 2045 不容易系列之(3)―― LELE的RPG难题(递推)
题意:有排成一行的n个方格,用红(Red).粉(Pink).绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法. 题解:本来当n=1时, ...
- hdu 2045 不容易系列之(3)—— LELE的RPG难题
解题思路: f(n)=1,2,.....n-2,n-1,n 前n-2个已经涂好,那么n-1有两种可能 1.n-1与n-2和1 的颜色都不同 1 粉, n-2 红, n-1 绿. 那么n的颜色 ...
- HDU 2045 不容易系列之(3)—— LELE的RPG难题 (递推)
题意:略. 析:首先是假设前n-2个已经放好了,那么放第 n 个时,先考虑一下第 n-1 放的是什么,那么有两种情况. 如果n-1放的是和第1个一样的,那么第 n 个就可以在n-2的基础上放2个,也就 ...
- HDU 2045 不容易系列之(3)—— LELE的RPG难题(递推)
点我看题目 题意 : 中文题不解释. 思路 :先算了第3个第4个,算的时候发现只要在已经枚举出来的前边的状态中往后添加字母就行了,如果两个的都已经表示出来了,那第三个就可以在每个第二个后边加一个,在 ...
- HDU 2045 不easy系列之(3)—— LELE的RPG难题
思路: 1.若前n-1位涂的颜色是符合条件的,则因为首尾不同,再加入一位时,仅仅有1种方法:即s[n] = s[n-1] 2.若前n-1位组成的串不符合,再加入一位后合法.即由于首尾同样而引起的不合法 ...
- hdoj 2045 不容易系列之(3)—— LELE的RPG难题
不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- 2045不容易系列之(3)—— LELE的RPG难题
Problem Description人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即”可乐”),经过多方打探,某资深Cole终于知道了原因,原 ...
- Hdoj 2045.不容易系列之(3)—— LELE的RPG难题 题解
Problem Description 人称"AC女之杀手"的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多"Cole"(LELE的粉丝,即"可乐 ...
- 【HDOJ】2045 不容易系列之(3)—— LELE的RPG难题
着色问题,递推,当超过3个块时,规律明显,此时可以是n-2的头尾重复+与头尾不同颜色,也可以是n-1+与头尾均不相同眼色情况.经典递推.注意long long. #include <stdio. ...
随机推荐
- HBase-Hbase启动异常java.lang.IllegalArgumentException: object is not an instance of declaring class
1.问题描述 HBase启动时异常如下: java.lang.IllegalArgumentException: object is not an instance of declaring clas ...
- 线性SVM决策过程的可视化
线性 SVM 决策过程的可视化 导入模块 from sklearn.datasets import make_blobs from sklearn.svm import SVC import matp ...
- NC22594 Rinne Loves Graph
题目链接 题目 题目描述 Island 发生了一场暴乱!现在 Rinne 要和 Setsuna 立马到地上世界去. 众所周知:Island 是有一些奇怪的城镇和道路构成的(题目需要,游戏党勿喷),有些 ...
- NC19782 Tree
题目链接 题目 题目描述 修修去年种下了一棵树,现在它已经有n个结点了. 修修非常擅长数数,他很快就数出了包含每个点的连通点集的数量. 澜澜也想知道答案,但他不会数数,于是他把问题交给了你. 输入描述 ...
- python 中异常类型总结
异常类型: 异常名称 描述BaseException 所有异常的基类SystemExit 解释器请求退出KeyboardInterrupt ...
- OneCloud记录
配置信息 S805, 1G RAM, 8G ROM, USB2.0 * 2, 1GB LAN, SD Cardreader S805参数: 32-bit, ARMv7-A, Cortex-A5, 1. ...
- python中矩阵切片维数微秒变化
1 前言 使用切片访问矩阵的部分数据(特别是一行或一列数据)时,通常会出现切片维数怎么在瞎变化,以致于不得不用reshape()强制改变维数.在深度学习中,网络对矩阵维数的要求是非常严格的,往往就是这 ...
- spring boot整合poi实现excel文件导入导出实战
今天科比离去,今天肺炎病毒持续肆虐... 意识到生命的脆弱,今天我继续前行,比以往更加坚定和紧迫,这辈子不活好自己就算白来一趟. 1.项目介绍 最近帮朋友做了一个小工具,就是实现:上传一个excel文 ...
- JVM之直接内存与非直接内存
直接内存 直接内存:概指系统内存,而非堆内存,不指定大小时它的大小默认与堆的最大值-Xmx参数值一致. 非直接内存: 也可以称之为堆内存,运行JVM都会预先分配一定内存,我们把JVM管理的这些内存称为 ...
- 在Android开发中如何使用OpenSL ES库播放解码后的pcm音频文件?
一.认识OpenSL ES OpenSL ES的全称是Open Sound Library For Embedded Systems,即应用于嵌入式系统的开源音频库.Android从2.3版本起就开始 ...