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) ...
随机推荐
- 安装HIVE
参考:https://cwiki.apache.org/confluence/display/Hive/GettingStarted 1.下载hive安装包 到apache官网或者其它地方下载 ...
- HDU 4308 Saving Princess claire_(简单BFS)
求出不使用P点时起点到终点的最短距离,求出起点到所有P点的最短距离,求出终点到所有P点的最短距离. 答案=min( 不使用P点时起点到终点的最短距离, 起点到P的最短距离+终点到P的最短距离 ) #i ...
- HTML5 canvas制作童年的回忆大风车
今天看到一篇CSS3写的大风车http://www.cnblogs.com/yaojaa/archive/2013/01/30/2882521.html,感觉CSS3太神奇了,这在以前用CSS是想都不 ...
- 硬件原理图Checklist检查表(通用版)
类别 描述 检视规则 原理图需要进行检视,提交集体检视是需要完成自检,确保没有低级问题. 检视规则 原理图要和公司团队和可以邀请的专家一起进行检视. 检视规则 第一次原理图发出进行集体检视后所有的修改 ...
- TCP系列22—重传—12、Forward Retransmit
一.概述 forward retransmit相关的内容在RFC6675中有描述,可以参考RFC6675 section 4中NextSeg ()的定义.forward retransmit中文名可以 ...
- 修改IntelliJ IDEA字体
- Dojo初探
Dojo 是一个由 Dojo 基金会开发的 Javascript 工具包, 据说受到 IBM 的永久支持,其包括四个部分: dojo, dijit, dojox, util dojo: 有时也被称作 ...
- JavaScript中setInterval常见的问题(setInterval第一个参数加引号与不加引号区别)
- Spring MVC之@RequestBody@ResponseBody详解
引言: 接上一篇文章讲述处理@RequestMapping的方法参数绑定之后,详细介绍下@RequestBody.@ResponseBody的具体用法和使用时机: 简介: @RequestBody 作 ...
- filter过滤器 默认情况下只对客户端发来的请求有过滤作用 对服务端的跳转不起作用 需要显示的在xml定义过滤的方式才行
filter过滤器 默认情况下只对客户端发来的请求有过滤作用 对服务端的跳转不起作用 需要显示的在xml定义过滤的方式才行