题目描述
一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。 现在,请你计算:对于给定的N和M,求不发生爆炸的放置核物质的方案总数(n <= 50, m <= 5)
输入
输入文件只有一行,两个正整数N,M。
输出
输出文件只有一个正整数,表示方案总数。
样例输入
4 3
样例输出
13
题解:
dp[i][j]: 前i个坑, 当前段已经连续放了j个, 的总方案数 dp[i][j]=dp[i-1][j-1] ( 0<j<m ) dp[i][0]=sum{ dp[i-1][0~m-1] },之前情况的总方案数
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int N=55; const int M=10; int n, m; long long dp[N][M], ans; int main() { scanf( "%d%d", &n, &m ); dp[1][0]=dp[1][1]=1; for( int i=2; i<=n; i++ ) for( int j=0; j<m; j++ ) { if(j) dp[i][j]=dp[i-1][j-1]; dp[i][0]+=dp[i-1][j]; } for( int j=0; j<m; j++ ) ans+=dp[n][j]; printf( "%lld\n", ans ); return 0; }
[BZOJ1529]核电站问题
最新推荐文章于 2023-01-16 10:09:46 发布