[POJ3783]Balls 题解
题目大意
鹰蛋问题.$
n\(个蛋,\)m\(层楼. 存在一层楼\)E\(,使得\)E\(以及\)E\(以下的楼层鹰蛋都不会摔碎,问最坏情况下最少多少次能够知道\)E$.
非常经典的模型,初看题目根本想不到用什么方法做,一开始可能会想到二分答案、单调队列和一些线性的东西。但是明确的说:这些都是不可行的!
正确的解法其实是\(DP\)
设计状态:
\(f[i][j]\)表示\(i\)个蛋,确定\(j\)层楼的\(E\)的答案. 如果当前在第\(k\)层扔蛋,两种可能:
- 蛋碎了,那么还剩下\(i-1\)个蛋,第\(j\)层不是\(E\)层,还有\(j-1\)层需要确定,可以从\(f[i-1][j-1]\)转移而来.
- 蛋没碎,还剩下\(i\)个蛋,第\(k\)层以下都不可能是\(E\)层了,还剩下\(j-k\)层需要确定.那么从\(f[i][j-k]\)转移而来. 注意,这里的从上往下数\(j-k\)层和从下往上数\(j-k\)层本质上是没有区别的,所以可以把这\(j-k\)层看作一个新的高\(j-k\)层的楼.
接着就是重中之重了,如何转移? 事情总是朝着最坏的方向发展的. 第\(k\)层会不会摔碎实际上是不能确定的!要从最坏的状态转移而来!那么状态转移方程就是:\(f[i][j]=min(max(f[i-1][j-1],f[i][j-k])+1,f[i][j])\).
然后就可以很快写出代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;
int T , cas , n , m ;
int f[ 3005 ][ 3005 ] ;
inline void solve () {
memset ( f , 0x3f , sizeof ( f ) ) ;
for ( int i = 1 ; i <= n ; i ++ ) f[ i ][ 0 ] = 0 ;
for ( int i = 1 ; i <= m ; i ++ ) f[ 1 ][ i ] = i ;
for ( int i = 1 ; i <= n ; i ++ ) {
for ( int j = 1 ; j <= m ; j ++ ) {
for ( int k = 1 ; k <= j ; k ++ )
f[ i ][ j ] = min ( f[ i ][ j ] , max ( f[ i - 1 ][ k - 1 ] , f[ i ][ j - k ] ) + 1 ) ;
}
}
}
signed main () {
scanf ( "%d" , &T ) ;
while ( T -- ) {
scanf ( "%d%d%d" , &cas , &n , &m ) ;
solve () ;
printf ( "%d %d\n" , cas , f[ n ][ m ] ) ;
}
return 0 ;
}
[POJ3783]Balls 题解的更多相关文章
- poj3783 Balls
Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1110 Accepted: 721 Description ...
- CF755G PolandBall and Many Other Balls 题解
从神 Karry 的题单过来的,然后自己瞎 yy 了一个方法,看题解区里没有,便来写一个题解 一个常数和复杂度都很大的题解 令 \(dp_{i,j}\) 为 在 \(i\) 个球中选 \(j\) 组的 ...
- CF850F Rainbow Balls 题解
考虑最后变成哪一种颜色. 设 \(s = \sum\limits_{i=1}^n a_i\) 设现在有 \(k\) 种当前颜色, 需要全部变成该种颜色, 期望步数为 \(f_k\). 考虑状态转移.设 ...
- 蓝桥杯-摔手机问题【dp】
非常详细的题解:戳这里 例题:poj-3783 Balls Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 115 ...
- HDU5781 ATM Mechine(DP 期望)
应该是machine 和POJ3783 Balls类型相似. 现在上界为i元,猜错次数最多为j时,开始猜测为k元,有两种情况: 1 猜中:(i - k + 1) * dp[i - k][j] 2 猜不 ...
- 题解-CF755G PolandBall and Many Other Balls
题面 CF755G PolandBall and Many Other Balls 给定 \(n\) 和 \(m\).有一排 \(n\) 个球,求对于每个 \(1\le k\le m\),选出 \(k ...
- POJ 3687 Labeling Balls(拓扑排序)题解
Description Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them ...
- 【题解】Popping Balls AtCoder Code Festival 2017 qual B E 组合计数
蒟蒻__stdcall终于更新博客辣~ 一下午+一晚上=一道计数题QAQ 为什么计数题都这么玄学啊QAQ Prelude 题目链接:这里是传送门= ̄ω ̄= 下面我将分几个步骤讲一下这个题的做法,大家不 ...
- 洛谷 CF399B【Red and Blue Balls】题解
n年没有更博客:我总结出了规律,当学的东西很难得时候都去学习,没有时间写博客,只有 内容对于我这种蒟蒻友好,又让我非常闲的慌时才写博客,这种博客以后也没有价值(也有些是做完一道题有成就感写的) 最近内 ...
随机推荐
- 关于在JSP页面识别不了EL表达式的情况
今天在JSP页面接收Controller返回的数据user_nickname,使用EL表达式显示数据发现在页面输出的始终是字符串${user_nickname} 经过查阅资料,问题在于使用的web.x ...
- Python的telnetlib模块使用
telnetlib模块的常用接口 telnetlib.Telnet(host, port, timeout) # 登录 write() # 输入命令 read_until(match) # 读出响应, ...
- Asp.Net Core 附加进程调试
第一种:VS调试 vs打开项目,F5启动调试 第二种:附加到w3wp.exe进程调试 一.安装NET Core Windows Server Hosting软件包 安装 .NET Core 托管捆绑包 ...
- Java集合框架1-- HashMap
HashMap的知识点可以说在面试中经常被问到,是Java中比较常见的一种数据结构.所以这一篇就通过源码来深入理解下HashMap. 1 HashMap的底层是如何实现的?(基于JDK8) 1.1 H ...
- Oracle11.2安装和完全卸载及卸载后重装等问题
官网:https://www.oracle.com/index.html 安装: 1.官网下载2.解压到同一个目录(database)3.运行安装4.如果提示系统版本低可在(database\stag ...
- u盘安装 osx 出现 “不能验证”
关于安装是出现关于出现“不能验证”错误: 解决办法 :打开终端 在"终端"里面修改时间 输入:date 032208102015.20
- MySQL之字段数据类型和列属性
数据类型: 对数据进行统一的分类,从系统的角度出发,为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类:数值类型.字符串类型.时间日期类型. 数值型: 数值型数据: ...
- 一个使用android相机的例子,二维码必须用相机
https://blog.csdn.net/feiduclear_up/article/details/51968975
- android 文件读写权限的设定
读取本地文件的权限问题 2016年08月15日 21:41:30 阅读数:2520 在一个音乐app过程中需要读取手机本地内存卡中的音乐文件并可以播放,具体遇到的问题如下:工程没有错误,运行出现以下信 ...
- django表单使用
一.表单常用字段类型及参数 表单可以自动生成html代码,每一个字段默认有一个html显示样式,大多数默认为输入框. 字段相当于正则表达式的集合,能够对表单传入的数据进行校验,并且某一部分校验失败时会 ...