2618 核电站问题

时间限制: 1 s

空间限制: 32000 KB

题目等级 : 黄金 Gold

题解

查看运行结果

题目描述 Description

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

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

输入描述 Input Description

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

输出描述 Output Description

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

样例输入 Sample Input

4 3

样例输出 Sample Output

13

数据范围及提示 Data Size & Hint

( 1< N<50,2≤M≤5)

本题网络上流行四种解法。其中一种三维dp有些啰嗦就不在此赘述。

首先强调:

1、使用long long

2、连续M个核燃料爆炸,所以合法的连续数至多为M-1

约定:0.M表示从0到M-1,0..M表示从0到M(学过Ruby等语言的童鞋应该知道)

解法一:dp

设f[i][j]表示第i个坑连续放了j个(i>=j),则f[i][0.M]的累加和即为第i个坑放放(m-1)个核燃料的方案总数。

可得状态转移方程:

f[i][0]=f[i-1]0.M

f[i][j]=f[i-1][j-1](第i个坑连续放了j个,相当于第i-1个坑连续放了j-1个的方案数,因为第i个坑连续放了j个相当于第i-1个坑连续放了j-1个的每个方案,在第i个坑又放了一个)

程序如下:

#include<cstdio>
using namespace std;
long long f[60][10],ans;
int N,M;
int main()
{
scanf("%ld%ld",&N,&M);
//初始化
f[1][0]=1;
f[1][1]=1;
for(int i=2;i<=N;i++)
{
for(int j=0;j<M;j++)
{
f[i][0]+=f[i-1][j];
}
for(int j=1;j<M;j++)
{
f[i][j]=f[i-1][j-1];
}
}
//累加和
for(int i=0;i<M;i++)
{
ans+=f[N][i];
}
printf("%ld",ans);
return 0;
}

每个大括号都尽量写上,以后改代码很好改——取经自BKdalao。

解法二、三均为递推,二者大同小异。时间关系以后补上~

【CODEVS】2618 核电站问题的更多相关文章

  1. codevs 2618 核电站问题

    时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题目描述 Description 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会 ...

  2. CODEVS——T 2618 核电站问题

    http://codevs.cn/problem/2618/  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description ...

  3. 核电站问题(codevs 2618)

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

  4. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  5. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  8. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  9. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

随机推荐

  1. javascript 释放变量

    JavaScript 释放变量 在Javascript是可以使用“delete”来手动删除变量,通过这样的方法让GC(Garbage collection)来回收内存,但在JS中并不是所有的变量都可以 ...

  2. php中的线程、进程和并发区别

    https://mp.weixin.qq.com/s/Ps5w13TTmpnZx-RPWbsl1A 进程 进程是什么?进程是正在执行的程序:进程是正在计算机上执行的程序实例:进程是能分配给处理器并由处 ...

  3. C++系列作业

    1.编写一个完整的程序,实现功能:向用户提问“现在正在下雨吗?”,提示用户输入Y或N.若输入为Y,显示“现在正在下雨.”:若输入为N,显示“现在没有下雨”:否则继续提问“现在正在下雨吗?” #incl ...

  4. bean的使用

    前言 Spring最基础的功能就是一个bean工厂,所以本文讲解的是Spring生成bean的种种方法及细节,Spring配置文件的名字是bean.xml,定义几个类: 一个Person类: publ ...

  5. PAT甲级——A1088 Rational Arithmetic

    For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...

  6. <每日一题>题目6:二分查找

    #二分查找 ''' 1.end问题 2.44对应的end<start 找不到情况 3.返回值递归的情况 4,611,aim太大的情况 ''' l = [2,3,5,10,15,16,18,22, ...

  7. NoSQL 文档数据库

  8. Codeforces-348E Pilgrims

    #4342. CF348 Pilgrims 此题同UOJ#11 ydc的大树 Online Judge:Bzoj-4342,Codeforces-348E,Luogu-CF348E,Uoj-#11 L ...

  9. 如何撤销Git操作?

    本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:如何撤销Git操作?: Git 版本管理时,往往需要撤销某些操作. 本文介绍几种最主要的情况,给出详细的解释.更多的命令可以参考< ...

  10. Python之MySQL语法(增删改查)

    -- ID: 新闻的唯一标示 -- title: 新闻的标题 -- content: 新闻的内容 -- created_at: 新闻添加的时间 -- types: 新闻的类型 -- image: 新的 ...