473. 核电站问题
★ 输入文件:nucle.in 输出文件:nucle.out 简单对比
时间限制:1 s 内存限制:128 MB
【问题描述】
一个核电站有 N 个放核物质的坑,坑排列在一条直线上。如果连续 M 个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。
任务:对于给定的 N 和 M ,求不发生爆炸的放置核物质的方案总数。
【输入格式】
输入文件(nucle.in)只一行,两个正整数 N , M( 1<N<50 , 2 ≤ M ≤ 5)
【输出格式】
输出文件 (nucle.out) 只有一个正整数 S ,表示方案总数。
【输入输出样例】
输入:
nucle.in
4 3
输出:
nucle.out
13
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 long long f[100]; 5 int main() 6 { 7 freopen("nucle.in","r",stdin); 8 freopen("nucle.out","w",stdout); 9 int i,j,n,m; 10 cin>>n>>m; 11 f[0]=1; 12 for(i=1;i<=n;i++) 13 { 14 if(i<m)f[i]=2*f[i-1]; //当i<=m时,怎么放都不爆炸,所以求所有的方法(因为加一个坑时,只有两种方法,--放与不放,所以f[i]=2*f[i-1]) 15 if(i==m)f[i]=2*f[i-1]-1;//当i==m时,用所有的方案减去所有坑都放的方案; 16 if(i>m)f[i]=2*f[i-1]-f[i-m-1];//用所有的方案减去会爆炸的方案 17 /*(i-m-1:因为f(i)为总方案数,又因为最后一个放,前面要有m-1个炸弹,才能引爆,所以m-1个的前面一个必须要不放;所以只有n-m-1的坑会变,求出此时的方案数 即f(i-m-1);)*/ 18 } 19 cout<<f[n]; 20 fclose(stdin); 21 fclose(stdout); 22 return 0; 23 }
时间: 2024-12-26 04:37:57