核电站问题转载自saltless原创
Rqnoj105 核电站问题 题解
又回到我可爱的Blog了~昨天偷了点懒,一篇文章也没写~今天一定抽时间补上。
下面切入正题。
【题目描述】(rqnoj105)
一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。
任务:对于给定的N和M,求不发生爆炸的放置核物质的方案总数
【输入格式】
输入文件只一行,两个正整数N,M( 1<N<50,2≤M≤5)
【输出格式】
输出文件只有一个正整数S,表示方案总数。
【样例输入】
4 3
【样例输出】
13
|
这是一道线性递推类的动态规划。说实话,这道题我直接看的题解,竟然没有看懂,纠结我一节课…先把代码贴上:
这巨短的代码理解起来还真不容易。首先,f数组存储的是到第f个坑可能出现的情况数。网上很多题解都用到分情况讨论,根据Jingo大牛的无敌思想,只要把数组向前多定m位,即-m到n即可。
另外一个比较纠结的地方就是这个神奇的动态方程。你可以自己分析一下,如果不懂请看下文。
我们先将方程分解,即f[i]:=f[i-1]+f[i-1]-f[i-m-1],这是显而易见的。两个f[i-1]分别代表的是f[i]位上放或者不放。但是f[i]上能放的条件是连续的一排上最多有m-1堆。以样例为例,当i=4时有以下状态:
因为如果在(4)放,在(3)号坑放的前提下(2)一定是不放的。所以要用在f[i-1](3号坑放的那一个)中排除有(2)且有(3)的那种情况。
由题意可知,如果(2)(3)都有核物质,(1)中一定没有。所以能达到图中的的状态的情况数只等于f[0],即f[i-m-1]的值。这时f[i-1]-f[i-m-1]就好理解了。
还有一个问题就是为什么f[0]和f[-1]都初始化为1。这可以从上文很简单的找到答案。因为当i=m(i-m-1=-1)或i=m+1(i-m-1=0)时,需要减去i,i-1,…,i-m+1都有核物质的这一种不符合题意的情况。
现在请把鼠标滚轮向上滚,重新看一遍代码。这是你就可以体会到这段伟大的O(n)的DP代码的魅力了。
(saltless原创,转载请注明出处)
核电站问题转载自saltless原创相关推荐
- uniapp:插件Luch_request 修改全局默认配置(转载请标明原创)
目的是为了方便前端以后修改接口,以下是修改方法. 一.插件市场 导入 luch-request ,导入成功后,根目录有一个文件夹叫 js_sdk ,打开会发现有一个 luch-request 文件夹. ...
- KMP(转载来自Matrix67原创)
转载复制来自:http://blog.163.com/36142114@qq.com/blog/static/168816502201072042753754/ 原作者:牛b的Matrix67(听说是 ...
- CREATE TABLE 表名 AS SELECT 语句 创建表(转载的非原创)转载自CSDN
转载地址: https://blog.csdn.net/u013332981/article/details/81907482 版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...
- (部分转载,部分原创)java大数类(2)
NYOJ 773 开方数 http://acm.nyist.net/JudgeOnline/problem.php?pid=773 1 import java.util.Scanner; 2 3 p ...
- 从0开始学习 GitHub 系列之「08.如何发现优秀的开源项目」----转载自stormzhang 原创文章
之前发过一系列有关 GitHub 的文章,有同学问了,GitHub 我大概了解了,Git 也差不多会使用了,但是 还是搞不清 GitHub 如何帮助我的工作,怎么提升我的工作效率? 问到点子上了,Gi ...
- 转载:ZZW原创_rsync同步时由于注释问题引起的@ERROR: chdir failed
1.需求:A机器同步文件到B机器 2.问题: A机器执行如下命令: [root@sv0379 rsync]# rsync -vzrtopg --password-file=/usr/local/rs ...
- stmt在java中的应用_JDBC技术基础总结转载,非原创
JDBC的全称是Java DataBase Connectivity,即Java数据库连接.它是一套行业标准的API,可以在Java应用程序中与关系型数据库建立连接,并执行相关操作,例如Oracle, ...
- 从0开始学习 GitHub 系列之「05.Git 进阶」----转载自stormzhang 原创文章
关于 Git 相信大家看了之前一系列的文章已经初步会使用了, 但是关于Git还有很多知识与技巧是你不知道的,今天就来给大家介绍下一些 Git 进阶的知识. 1. 用户名和邮箱 我们知道我们进行的每一次 ...
- 从0开始学习 GitHub 系列之「04.向GitHub 提交代码」----转载自stormzhang 原创文章
之前的这篇文章「从0开始学习 GitHub 系列之「Git速成」」相信大家都已经对 Git 的基本操作熟悉了,但是这篇文章只介绍了对本地 Git 仓库的基本操作,今天我就来介绍下如何跟远程仓库一起协作 ...
最新文章
- R语言使用ggplot2包使用geom_density()函数绘制分组密度图(自定义调色板填充色、brewer调色板填充、灰度比例填充)实战(density plot)
- 基于Arduino ATmega328人脸识别IOT演示门锁
- SAP CK40N常见问题
- GDB 调试 Mysql 实战(一)源码编译安装
- vs安装 c语言编译环境,Visual Studio Code安装与C/C++开发调试环境搭建
- 面试题:Two Sum
- matlab按行读文件
- 完美数简介及算法分析
- realtek 8111E 网卡 修改MAC 地址
- Altium Designer20 PCB规则设置
- Java研发技术学习路线
- linaro根文件系统仓库
- Google SEO优化排名常见的三种问题
- Python-爬取淘宝搜索结果
- LuoguP2472 SCOI2007 蜥蜴
- easyui-combobox加载json中对象的属性
- DXC Technology推出DXC Bionix™,以大规模提供自动化IT服务
- BigDecimal比较建议用compareTo
- AR9344中ethernet处理方式分析
- IDEA代码颜色字体风格设置
热门文章
- 电脑箭头,电脑箭头符号怎么打出来(往返箭头符号图案)
- 计算机的的编码多的原因,计算机蓝屏代码0x000003b原因和解决方案
- 计算机快捷键大全windows,windows系统常见快捷键大全
- 大学物理上复习公式提要
- showdoc mysql版_ShowDoc部署手册
- 微信JSSDK 签名错误invalid signature排查
- Flutter 标签类控件大全Chip
- 微信转盘抽奖前端源码(三):移动端浏览器兼容性(12个奖品,指针开始时指向奖品)
- 数据资源 | 搞学术,还能不知道这八大调查数据开放平台?
- 【原创推荐】 计算机毕业设计之Python+Spark+LSTM电商爬虫 商品推荐系统 商品评论情感分析 电商大数据 电商推荐系统 大数据毕业设计