1256: 核电站问题
时间限制: 1 Sec 内存限制: 128 MB题目描述
一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续3个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。现在,请你计算:对于给定的N,求不发生爆炸的放置核物质的方案总数。
输入
输入文件只有多行,每行对应一个正整数N<=40;
输出
输出文件有多行,每行只有一个正整数,表示方案总数
样例输入
1
2
3
4
10
样例输出
2
4
7
13
504
提示
来源
分析:
1、一个有趣的数学组合问题。
2、数学分析法去分析,设f[n]数组表示n个坑的方案数,如果有n个坑,前面n-1个坑有f[n-1]种情况,则第n个坑有2种情况。所以f[n]=2*f[n-1]。但是,这样有重复,必须减去第n个坑放核物质时爆炸的情况,即最后3个坑放核物质,但倒数第4个坑不放核物质,所以减去f[n-4]种情况。因此f[n]=2*f[n-1]-f[n-4]。
LANGUAGE:C++
CODE:
#include <iostream>
#define MAX_N 1005
using namespace std;
int main()
{
//freopen("data.txt","r",stdin);
int f[MAX_N];
f[1]=2;
f[2]=4;
f[3]=7;
f[4]=13;
int n;
while(cin>>n)
{
for(int i=5;i<=n;i++)
f[i]=2*f[i-1]-f[i-4];
cout<<f[n]<<endl;
}
return 0;
}