Tyvj P3119 核电站问题 动态规划

P3119 核电站问题
时间: 1000ms / 空间: 65536KiB / Java类名: Main

描述

  一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。 
  任务:对于给定的N和M,求不发生爆炸的放置核物质的方案总数 

输入格式

  输入文件只一行,两个正整数N,M( 1 

输出格式

  输出文件只有一个正整数S,表示方案总数。

测试样例1

输入

4 3

输出

13
题解:
动态规划
f[i][j]为到第i个,放了j个爆炸物的方案数。
数学方法不行QAQ
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define LL long long
 4 LL f[55][6];
 5 int main()
 6 {
 7     freopen("nucle.in","r",stdin);
 8     freopen("nucle.out","w",stdout);
 9     LL ans,n,m,i,j,k;
10     scanf("%lld %lld",&n,&m);
11     memset(f,0,sizeof(f));//f[i][j]为到第i个,放了j个爆炸物的方案数.
12     f[1][0]=f[1][1]=1;
13     for(i=2;i<=n;i++)
14     {
15         for(j=0;j<m;j++)f[i][0]+=f[i-1][j];
16         for(j=0;j<m;j++)f[i][j]+=f[i-1][j-1];
17     }
18     ans=0;
19     for(i=0;i<m;i++)ans+=f[n][i];
20     printf("%lld",ans);
21     /*错误的数学方法
22     for(i=1;i<=n;i++)ans*=2;
23     k=n-m+1;
24     if(k<=0)printf("%lld",ans);
25     else
26     {
27         for(i=k;i>=1;i--)ans-=i;
28         printf("%lld",ans);
29     }*/
30     return 0;
31 }
原文地址:https://www.cnblogs.com/Var123/p/5333280.html