Tyvj P3119 核电站问题 动态规划

Posted 微弱的世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于Tyvj P3119 核电站问题 动态规划的主要内容,如果未能解决你的问题,请参考以下文章

动态规划入门 TYVJ1305 最大子段和(环状)

多局部最优的水电站水库调度随机动态规划

论文推荐无锡供电公司陈黎军河海大学卫志农等:考虑充电需求增长的充电站动态规划方法

经典的动态规划

路径规划基于蚁群算法求解电动汽车充电站与换电站协调路径规划matlab源码含GUI

配送路径规划基于matlab遗传算法求解带时间窗的含充电站配送车辆路径规划问题含Matlab源码 509期