描述
一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。
任务:对于给定的N和M,求不发生爆炸的放置核物质的方案总数
输入
只一行,两个正整数N,M( 1 < N < 50,2 ≤ M ≤ 5 )
输出
一个正整数S,表示方案总数。
样例输入
4 3
样例输出
13
题解
比较常见的思路,多开一维存储状态即可。
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 int n,m; 6 long long f[105][105]; 7 int main() 8 { 9 scanf("%d%d",&n,&m); 10 f[0][0]=1; 11 for(int i=1 ; i<=n ; ++i ) 12 { 13 for(int j=1 ; j<m ; ++j) 14 { 15 f[i][j]+=f[i-1][j-1]; 16 f[i][0]+=f[i-1][j-1]; 17 } 18 f[i][0]+=f[i-1][m-1]; 19 } 20 long long ans=0; 21 for(int i=0 ; i<m ; ++i)ans+=f[n][i]; 22 printf("%lld",ans); 23 return 0; 24 }