核电站问题

一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续M个坑中放入核物质,则会发生爆炸,

于是,在某些坑中可能不放核物质。

任务:对于给定的N和M,求不发生爆炸的放置核物质的方案总数。

输入描述 Input Description

输入文件只一行,两个正整数N,M( 2<=N<50,2≤M≤5)

输出描述 Output Description

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

样例输入 Sample Input
4 3

样例输出 Sample Output
13

题解:
方法一:
从第一个坑开始放,开始dfs,每个坑都有两种可能,放或者不放,dfs(i,j)i第i个坑,j前i个坑最后j个坑都填了物质,若j达到m,则次方案不行,若没有m,继续

#include<stdio.h>int n,m,ans=0;int dfs(int i,int j){if(j==m) return 0;//如果有连续的m坑都有物质,此方案不行 if(i==n) {ans++;//能到n,说明之前没有连续的m坑都有物质,此方案可以return 1;} int ans=0;dfs(i+1,0);//第i+1个坑里没有物质,之后的坑里是否放物质与前面没有联系了 dfs(i+1,j+1);//前i+1个坑中最后连续j+1个坑里都有物质,
}
int main(){int res;scanf("%d%d",&n,&m);dfs(0,0);//从第0个坑里开始放 printf("%d",ans);
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

方二:
dp[n]表示在n个坑中,每个坑都有两种可能,放或者不放,但不能有连续m个坑里都有物质

从头开始向后放,每个坑都有两种可能,放或者不放

开头前i个连续的坑中都有核物质(0<=i<=m-1),则第i+1个坑必空。 i+1后面的坑再放和前面的就又没关系了

i=0时的放法为dp[n-1]; 在后n-1个坑中,每个坑都有两种可能,放或者不放,但不能有连续m个坑里都有物质
i=1时的放法为dp[n-2]; 在后n-2个坑中…………
……………………;
i=m-1时的放法为dp[n-m]。 在后n-m个坑中…………

得dp[n]=dp[n-1]+dp[n-2]+……+dp[n-m] 。

当n<=m-1时: dp[n]=2*dp[n-1] (无论放还是不放,都不会有连续m个坑里都有)

当n==m时: dp[n]=2*dp[n-1] -1(减去每个坑里都有核物质这种情况)

当n>m时:
dp[n]=dp[n-1]+dp[n-2]+……+dp[n-m]
dp[n-1]=dp[n-2]+……+dp[n-m]
两式相减得:
dp[n]=dp[n-1]*2-dp[n-m-1]

#include<stdio.h>int main(){int n,m,i;scanf("%d%d",&n,&m);long long dp[n+1];dp[0]=1;//n>1,m>1;for(i=1;i<=n;i++){if(i<m) dp[i]=dp[i-1]*2;else if(i==m) dp[i]=dp[i-1]*2-1;else dp[i]=dp[i-1]*2-dp[i-m-1];}printf("%lld",dp[n]);
} 

核电站问题 动态规划相关推荐

  1. 1212: 核电站问题动态规划等多种方法(以及二进制模拟)

    文章目录 问题 小白的代码 二进制模拟 大佬的码 思路分析 代码实现 另一份代码 分析 大佬代码又又又来了 问题 1212: 核电站问题 时间限制: 1 Sec 内存限制: 128 MB 提交: 72 ...

  2. OpenJudge2.6基本算法之动态规划9267:核电站

    OpenJudge2.6基本算法之动态规划9267:核电站 题目传送门 这题和放苹果挺类似的,都是要分情况讨论i和m的大小关系 case1:如果i<m 这说明在这段区间里怎么放都不会炸,那么状态 ...

  3. 核电站问题(简单DP)

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

  4. ACM: 百练NOI——基本算法之动态规划

    文章目录 Maximum sum(求两个不重叠子区间最大和) Post Office(感觉题解有问题) 最长上升子序列 最大子矩阵 采药(0-1背包) 最长公共子序列 吃糖果 登山 最长公共上升子序列 ...

  5. 核电站问题转载自saltless原创

    Rqnoj105 核电站问题 题解 又回到我可爱的Blog了~昨天偷了点懒,一篇文章也没写~今天一定抽时间补上. 下面切入正题. [题目描述](rqnoj105) 一个核电站有N个放核物质的坑,坑排列 ...

  6. 动态规划常见类型总结

    本文针对动态规划的常见类型进行总结.虽说总结的是动态规划,但顺便把递推也放了进来.严格来说,递推不属于动态规划问题,因为动态规划不仅有递推过程,还要有决策(即取最优),但广义的动态规划是可以包含递推的 ...

  7. [题目总结][动态规划] 更新ing

    待更新...... 动态规划是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决. 以上摘自知乎. 就停课以来做的题来看,除了那些根本不会的,要注意的大概有 1. ...

  8. 1212: 核电站问题

    1212: 核电站问题 时间限制: 1 Sec  内存限制: 128 MB 提交: 395  解决: 274 [提交][状态][讨论版][命题人:外部导入] 题目描述 一个核电站有N个放核物质的坑,坑 ...

  9. 伍六七带你学算法 动态规划 ——不同路径

    力扣 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格 ...

最新文章

  1. Office 365发送超大附件
  2. 智慧城市顶层设计方法_主頁
  3. linux内核关于io的变迁
  4. hdu 2879【留坑】
  5. CONCAT 联合查询
  6. Jenkins忘记密码的修复方法(Windows/Linux)
  7. 【转载】Ubuntu环境下配置Android Studio
  8. Android Notification 手机系统横幅弹出提示框调用,横幅通知,RemoteViews使用实例
  9. 组件:slot插槽、组件:组合slot
  10. DP(递归打印路径) UVA 662 Fast Food
  11. MAC编译lame ld: symbol(s) not found for architecture x86_64/_lame_init_old“, referenced from
  12. kali-linux学习笔记及经验总结(持更)
  13. 机器视觉的四大类应用
  14. 飞算(SoFlu)软件机器人——人人都是全栈架构师
  15. 甜在心馒头店通过泊松分布解决备货烦恼
  16. 个人博客管理系统详解
  17. uniapp简单封装的激励广告和插屏广告
  18. 计算机信息安全及职业道德,CISP人员职业道德的准则
  19. 平均每个ICO项目存在5个高危漏洞,所有ICO移动应用都存在安全漏洞
  20. Spark优化-开启动态资源分配

热门文章

  1. 微信小程序的开发使用第三方组件库
  2. 查看Chrome浏览器版本及下载对应的webdriver,并下载安装
  3. 对学姐的U-net网络的学习杂记
  4. 阿里云视频点播相关代码
  5. TCP通信多发多收,和接收多个客户端消息
  6. 机器学习中样本不平衡,怎么办?
  7. [MongoDB] 按时间分组统计(任意时间段)
  8. 大数据框架Hadoop篇之Hadoop入门
  9. 被人民日报点名的马保国,一年能挣多少钱?
  10. 刮刮奖效果的简单实现