Problem L: RGB

Problem K: RGB

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 2962  Solved: 747

Description

人称AC之神的QIGe最近一直忙着培养NOI高手,为了鼓励NOI高手, QiGe做了若干雨花石项链,作为对表现优秀的选手的奖励.他会挑选一个雨花石作为这串项链的开始,然后一个接一个连起来,现在他有三种颜色的雨花石,红(Red)、绿(Green)、蓝(Blue),做项链的时候他要求每相邻的2个雨花石不能相同的颜色,尽管最后一步把首尾连接起来的工作QiGe不需要去做,但也必须保证首尾2个雨花石它们是不同颜色。你知道QiGe有多少种串项链的方法吗?

Input

输入数据包含多个测试实例,每个测试实例占一行,由一个整数N组成,(0<n<=50)。

Output

对于每个测试实例,请输出全部的满足要求的排法,每个实例的输出占一行。

Sample Input

1
2

Sample Output

3
6

HINT


2020.05.29更新:

再一次碰到这个题。这次想证明:

设dp[n]为第n个点的所有状态数量,属性为总和。

我们讨论:n点和n-2那个点的同色和不同色的情况

那么过程如下:

同色的话就是完全等价dp[n-1]的个数,因为n-2和n同色,就不影响n是什么颜色的放入,不管n放什么不会影响n-1的状态。所以这个状态是dp[n-1]

不同色的话,假设,我们看n-2为G,那么n为R或者n-2为R,n为G,实际上就是讨论n-1这个点是什么颜色,n-1这个点总共有三个颜色。我们讨论其中一个,假设n-1为B,那么这个状态的数量为dp[n-2][R]+dp[n-2][G];同理n-1为G的时候,数量为dp[n-2][G]+dp[n-2][B];同理n-1为R的时候,数量为dp[n-2][G]+dp[n-2][B];

然后你把六个加起来,就是等价于dp[n-2]*2的状态数量。

再加上前面的dp[n-1];

所以推出来dp[n]=dp[n-1]+dp[n-2]*2


第一次碰到的时候:

看到这题第一想法是高中接触过的圆排列,用排列组合算n=3,n=4,n=5发现和朋友对不上。一看发现这题目项链是横着的。就是 。--。--。--。--。,然后首尾不同色,而我想的是圆,重新想了后发现  1- 3  2-6  3-6 4-18 5-30,其实这里规律不太好找,如果时间多用排列组合去推n=6时规律一眼就能看出来。  通常我们是拿题目给的数据当递推起始条件,但是这里n=3时也是6,所以可能是从第3项去找规律的。

在草稿纸上算的时候n=4时  6*(1+2),猜测这个1是a[n-1]的,2是2*a[n-2]的,因为毕竟这时候两个数都是6 接下去验证

算n=5时  6*(1+2+2)     里面出现的6*(1+2)是a[n-1]的,6*2是2*a[n-2]的,验证完毕。但是这题递推没搞出来的话考试时间还多的话可以去算n=6的情况,讨论比较多,排列的知识也还给高中老师差不多了,所以这题还是有一些难度的。


#include<stdio.h>
long long int a[100];
int main(void)
{
    long long int n,i;
    a[0]=0;a[1]=3;a[2]=6;a[3]=6;
    while(scanf("%lld",&n)!=EOF)
    {
        for(i=4;i<=n;i++)
        a[i]=a[i-2]*2+a[i-1];     注意是long long,  long的时候打50炸成2了
        printf("%lld\n",a[n]);
    }
    return 0;
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值