9267:核電站
總時間限制: 5000ms 單個測試點時間限制: 1000ms 內存限制: 131072kB
描述
一個核電站有N個放核物質的坑,坑排列在一條直線上。如果連續M個坑中放入核物質,則會發生爆炸,於是,在某些坑中可能不放核物質。
任務:對於給定的N和M,求不發生爆炸的放置核物質的方案總數
輸入
只一行,兩個正整數N,M( 1 < N < 50,2 ≤ M ≤ 5 )
輸出
一個正整數S,表示方案總數。
樣例輸入
4 3
樣例輸出
13
題解:維護一個二維數組f,
首先,
若第i個坑放,那麼有三種情況:
1.若
2.若
3.若
代碼:
#include<iostream>
#include<cstdio>
using namespace std;
long long n,m,f[55][2];
int main()
{
int i,j;
scanf("%lld%lld",&n,&m);
f[1][0]=1;
f[1][1]=1;
for (i=2;i<=m-1;i++)
{
f[i][1]=f[i-1][1]+f[i-1][0];
f[i][0]=f[i-1][0]+f[i-1][1];
}
f[m][0]=f[m-1][0]+f[m-1][1];
f[m][1]=f[m-1][0]+f[m-1][1]-1;
for (i=m+1;i<=n;i++)
{
f[i][0]=f[i-1][0]+f[i-1][1];
f[i][1]=f[i-1][1]+f[i-1][0]-f[i-m][0];
}
printf("%lld",f[n][1]+f[n][0]);
}