Description

由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥。 
小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是每次都从A开始跳,每次都可以任意跳到其他块,但最后必须跳回A,且不能原地跳.为达到减肥效果,小黑每天都会坚持跳n次,有天他突然想知道当他跳n次时共几种跳法,结果想了好几天没想出来-_- 
现在就请你帮帮他,算出总共有多少跳法。 
 

Input

测试输入包含若干测试用例。每个测试用例占一行,表示n的值(1<=n<=1000)。 
当n为0时输入结束。 
 

Output

每个测试用例的输出占一行,由于跳法非常多,输出其对10000取模的结果.
 

Sample Input

2
3
4
0
 

Sample Output

2
2
6
 
1.DFS得出结果,找规律

#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 ;
}

参考:http://www.voidcn.com/article/p-pkzamxse-et.html

HDU 2154 跳舞毯 | DP | 递推 | 规律的更多相关文章

  1. hdu 2604 Queuing(dp递推)

    昨晚搞的第二道矩阵快速幂,一开始我还想直接套个矩阵上去(原谅哥模板题做多了),后来看清楚题意后觉得有点像之前做的数位dp的水题,于是就用数位dp的方法去分析,推了好一会总算推出它的递推关系式了(还是菜 ...

  2. HDU 5860 Death Sequence(递推)

    HDU 5860 Death Sequence(递推) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5860 Description You ...

  3. HDU 2085 核反应堆 --- 简单递推

    HDU 2085 核反应堆 /* HDU 2085 核反应堆 --- 简单递推 */ #include <cstdio> ; long long a[N], b[N]; //a表示高能质点 ...

  4. hdu2089(数位DP 递推形式)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. hdu 1723 DP/递推

    题意:有一队人(人数 ≥ 1),开头一个人要将消息传到末尾一个人那里,规定每次最多可以向后传n个人,问共有多少种传达方式. 这道题我刚拿到手没有想过 DP ,我觉得这样传消息其实很像 Fibonacc ...

  6. HDU 5366 dp 递推

    The mook jong Accepts: 506 Submissions: 1281 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...

  7. HDU 3469 Catching the Thief (博弈 + DP递推)

    Catching the Thief Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  8. hdu 2050 折线分割平面 dp递推 *

    折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  9. HDU 6076 Security Check DP递推优化

    Security Check Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) ...

随机推荐

  1. POJ 3498 March of the Penguins(网络最大流)

    Description Somewhere near the south pole, a number of penguins are standing on a number of ice floe ...

  2. Python决定一个变量时局部的,还是全局的,是在编译期

    Python中的变量名是在编译时就解析好的,换句话说,在编译时(也就是在交互控制台输入代码是或者import文件时),Python就已经决定一个变量应该是局部变量,还是全局变量.来看下面的例子: &g ...

  3. C语言--链表基础模板

    1.建立结构体 struct ST { int num;///学号 int score;///成绩 struct ST*next; };///结构体 2.空链表的创建 struct ST creatN ...

  4. maven把项目打包成jar包后找不到velocity模板的bug

    使用springmvc 开发时候要实现发送velcotiy模板邮件,在配置正常后,在本地测试正常后,使用maven打包成jar包后,报以下错误, Caused by: org.apache.veloc ...

  5. java中对象和对象的引用

    1.何谓对象? 在Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编程思想>中的一 ...

  6. Xcode常见警告和错误

    Xcode 升级后,常常遇到的遇到的警告.错误,解决方法 从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo”  is depreca ...

  7. 在 Range 对象中,Min (14)必须小于或等于 max (-1)。

    DataTable dt = ds.Tables[]; DataRow[] drs = dt.Select("Id=" + categoryID ); 解决方法:将参数用单引号阔起 ...

  8. JS DOM视频相关的知识

    1.实现点击a标签改变图片时,如果a的href属性有一个目标网址,但是点击又必须跳转到另外一张图,往往会最后跳转到目标网址,可以在onclick事件函数中加入ruturn false,阻止跳转到页面. ...

  9. 修改QQ各版本的默认保存位置(聊天记录)

    这几天没少折腾windows,都有点烦了,我是那种有强迫症的,只要知道的自己没有做到的会感觉到浑身不爽的因为系统重装了好几次,QQ也没少安装几次,我使用的是TM的QQ(没有 那么多烦人的广告,娱乐组件 ...

  10. HASH表的实现(拉链法)

    本文的一些基本概念参考了一部分百度百科,当然只保留了最有价值的部分,代码部分完全是自己实现! 简介 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据 ...