Hdu_2045 不容易系列之(3)―― LELE的RPG难题(递推)

题意:

一列格子涂色,有三种颜色可以选择,但是要求相邻格子颜色不能相同,首尾颜色不能相同。求涂N个格子最多有多少种选择。

思路:

虽然这道题以前做过但是还是第一眼想不到思路。。。其实很简单,模拟一下就好了。

模拟出前三个:

1:1, 2, 3

2:12,13,21,23,31,32

3:123,132,231,213,312,321

当需要放第4个的时候有两种情况:

1. 第3个格子颜色与第1个不相同,即上面第3种情况的个数,这时第4个格子只有一种选择;

2. 第3个格子颜色与第1个不相同,即上面第2种情况(后面填上一个与第1个格子相同的颜色),这时第4个格子有两种选择;

所以我们得到递推式:a[n]=a[n-1]+a[n-2]*2;(n>3)

代码实现:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define MAX 55
#define LL long long
using namespace std;

int N;
LL res;
LL save[MAX];
void dfs(int pos);
int main()
{
    save[1] = 3;
    save[2] = 6;
    save[3] = 6;
    for( int i = 4; i <= 50; i++ ){
        save[i] = save[i-1] + 2*save[i-2];
    }
    while( scanf("%d",&N)!=EOF ){
        printf("%I64d\n",save[N]);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值