HDU 2154 跳舞毯 | DP | 递推 | 规律
Description
小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是每次都从A开始跳,每次都可以任意跳到其他块,但最后必须跳回A,且不能原地跳.为达到减肥效果,小黑每天都会坚持跳n次,有天他突然想知道当他跳n次时共几种跳法,结果想了好几天没想出来-_-
现在就请你帮帮他,算出总共有多少跳法。
Input
当n为0时输入结束。
Output
Sample Input
Sample Output
#include <iostream>
#include "cstdio"
using namespace std;
#define MOD 10000
int n,cnt;
int dfs(char c,int k)
{
if(k==n+)
{
if(c=='A')
cnt++;
return cnt%MOD;
}
if(c=='A'){
dfs('B',k+);
dfs('C',k+);
}
else if(c=='B'){
dfs('A',k+);
dfs('C',k+);
}
else if(c=='C'){
dfs('B',k+);
dfs('A',k+);
}
}
int main()
{
//freopen("out.txt","w",stdout);
int ans=;
for(n=;n<;n++){
cnt=;
cout<<n<<" "<<dfs('A',)<<endl;
}
return ;
}
观察数据找到规律:
if(i%2==0)
a[i]=2*a[i-1]+2;
else a[i]=2*a[i-1]-2;
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int i,n,step[]={,,,};
for(i=; i<; i++)//打表
{
if(i%==)
step[i]=*step[i-]+;
else
step[i]=*step[i-]-;
step[i]=step[i]%;
}
while(scanf("%d",&n)&&n!=)
{
printf("%d\n",step[n]%);
}
return ;
}
参考:http://blog.csdn.net/castledrv/article/details/46897311
2.递推式f[i]=2^(i-1)-f[i-1] 进一步推出f[i]=2^(i-2)+f[i-2]
含义:
A_A B | C 2
A__A BC | CB 2
A___A BAB | CAC | BCB | CBC | BAC | CAB 2
即后四个空全排列-以A结尾的排列数
f[i]=2^(i-1)-f[i-1]
f[i-1]=2^(i-2)-f[i-2]
->
f[i]=2^(i-2)+f[i-2]
#include<iostream>
using namespace std;
#define mod 10000
int main()
{
int a[] = { ,,, };
int n; int k = ;
for (int i = ; i < ; i++)///打表
{
a[i] = (k%mod + a[i - ] % mod) % mod;
k = k * % mod;
}
while (cin >> n&&n)
{
cout << a[n] << endl;
}
return ;
}
参考:http://www.cnblogs.com/dream-wind/archive/2012/03/16/2400596.html
3.DP
dp[i][j]
j=1表示第i步红色的步数
j=2表示第i步在黄色的步数
j=3表示第i步在蓝色的步数
对于每次跳到红色的状态有:第i-1必须是在蓝色和黄色的地板上
所以dp[i][1]=dp[i-1][2]+dp[i-1][3];
第i步黄色也有dp[i][2]=dp[i-1][1]+dp[i-1][3];
第i步蓝色有dp[i][3]=dp[i-1][1]+dp[i-1][2];
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int dp[][];
int main()
{
dp[][]=;int i;
dp[][]=;dp[][]=;
for(i=;i<=;i++)
{
dp[i][]=dp[i-][]+dp[i-][];
dp[i][]=dp[i-][]+dp[i-][];
dp[i][]=dp[i-][]+dp[i-][];
dp[i][]=dp[i][]%;
dp[i][]=dp[i][]%;
dp[i][]=dp[i][]%;
}
int n;
while(scanf("%d",&n)&&n)
{
printf("%d\n",dp[n][]);
}
return ;
}
HDU 2154 跳舞毯 | DP | 递推 | 规律的更多相关文章
- hdu 2604 Queuing(dp递推)
昨晚搞的第二道矩阵快速幂,一开始我还想直接套个矩阵上去(原谅哥模板题做多了),后来看清楚题意后觉得有点像之前做的数位dp的水题,于是就用数位dp的方法去分析,推了好一会总算推出它的递推关系式了(还是菜 ...
- HDU 5860 Death Sequence(递推)
HDU 5860 Death Sequence(递推) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5860 Description You ...
- HDU 2085 核反应堆 --- 简单递推
HDU 2085 核反应堆 /* HDU 2085 核反应堆 --- 简单递推 */ #include <cstdio> ; long long a[N], b[N]; //a表示高能质点 ...
- hdu2089(数位DP 递推形式)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 1723 DP/递推
题意:有一队人(人数 ≥ 1),开头一个人要将消息传到末尾一个人那里,规定每次最多可以向后传n个人,问共有多少种传达方式. 这道题我刚拿到手没有想过 DP ,我觉得这样传消息其实很像 Fibonacc ...
- HDU 5366 dp 递推
The mook jong Accepts: 506 Submissions: 1281 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- HDU 3469 Catching the Thief (博弈 + DP递推)
Catching the Thief Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 2050 折线分割平面 dp递推 *
折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU 6076 Security Check DP递推优化
Security Check Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
随机推荐
- 【转】c++面试基础
1,关于动态申请内存 答:内存分配方式三种: (1)从静态存储区域分配:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在. 全局变量,static变量. (2)在栈上创建:在执行函 ...
- VS2013运行C++报错:This function or variable may be unsafe. Consider using fopen_s instead.
在vs2013中运行时发生的关于方法调用的不安全错误. 1.更换方法,但是有些方法更改后参数不变,所以可能比较麻烦. 2.添加一条预处理器定义: 点击项目——>属性——>c/c++——&g ...
- 算法与数据结构实验题 4.1 伊姐姐数字 game
★实验任务 伊姐姐热衷于各类数字游戏,24 点.2048.数独等轻轻松松毫无压力.一 日,可爱的小姐姐邀请伊姐姐一起玩一种简单的数字 game,游戏规则如下: 一开始桌上放着 n 张数字卡片,从左到右 ...
- (一)Model的产生及处理
MVC的概念其实最早可以追溯到很久很久以前,并不是WEB开发过程中所首创, 但是,MVC也适合WEB上的开发,并真正的在WEB开发领域广泛应用.MVC的第一个字母M是Model,承载着View层和Co ...
- JDK中的泛型
Java中的泛型介绍: 起因: 1. JDK 1.4 以前类型不明确: ① 装入集合的对象被当作 Object 类型对待,从而失去了自己的原有类型: ② 从集合中取出时往往需要转型,效率低下,并且容易 ...
- Python 零碎信息-基础 01
1. """ 可以插入多行文字. print """ abC 123' 456''" #单引号, 双引号, 也没有关系 " ...
- C# Designer.cs
designer.cs 是窗体设计器生成的代码文件,作用是对窗体上的控件做初始化工作(在函数InitializeComponent()中) VS2003以前都把这部分代码放到窗体的cs文件中,由于这部 ...
- Windows7系统目录迁移:Users,Progr…
微软设计了比如:我的文档.我的OOXX,之类的东西,在WIN7下面更连游戏.下载等等目录都设计好了,我也很乖巧的把各种文件都分门别类的放进去了. 同时也很厉害的设计在了“%HOMEDRIVE%”里面, ...
- java基础简介
一.软件开发 软件:是由数据和指令组成的(例:计算器) 如何实现软件开发呢? 就是使用开发工具和计算机语言做出东西来 二.常用dos命令 d: 回车 盘符切换 dir(directory):列出 ...
- Qt——设计颜色编辑选取对话框
Qt中已经有一些封装好的对话框,比如QMessageBox.QColorDialog等,使用起来快捷方便,但缺点是我们无法为它们自定义样式,所以可能难以“融入”我们的项目.既然如此,那就自己做一个把. ...