【Uva 10934】Dropping water balloons
【Link】:
【Description】
等价题意:
某人在1..n内选一个数x;
然后让你去猜;
你可以问他是不是在哪个范围里;
每次会告诉你YES或者NO;
问你在最坏的情况下猜出答案需要猜多少次;
且猜的数字大于x的次数不能超过k次.
【Solution】
动态规划.
设f[i][j]表示前i个水球,做了j次试验;能得到的最大高度;
这里的f[i][j];
指的是,如果问的数字是1..f[i][j],的话,用i个水球都能够通过试验猜到.
(这里的状态f[i][j]中,j>=i也是可行的状态的..)
考虑第一次试验;
假设从高度x落下;
则
1.如果水球破了
则要保证如果问的数字是1..x-1的话,用i-1个球和j-1次试验能猜得到.
那么,x的最大值应该是f[i-1][j-1]+1;
2.如果水球没破
则我们还剩下i个球以及j-1次试验的机会;
而x的最大值只能是f[i-1][j-1]+1
(这里,我们必须也要照顾到球破了的情况才行..因为是最坏情况)
所以,如果在球没破的时候,我们最多能够处理
x+f[i][j-1]也即1..f[i-1][j-1]+1+f[i][j-1]
这样就能得到状态转移方程了;
f[i][j] = f[i-1][j-1]+1+f[i][j-1]
这样如果想的数字在1..f[i][j]这个范围内都能保证猜得到.
然后在f[k][j],j∈[1..63]中找最小的满足f[k][j]>=n的j;
输出就好;
如果没找到,就输出无解;
UPD1
对转移方程的解释:
这里如果球破了的话,1..f[i-1][j-1]能得到;
球没破的话,f[i-1][j-1]+2..f[i][j]这一段也能用剩下的实验次数得到.
【NumberOf WA】
1
【Reviw】
用数学的递推,取代感性的认知.
对问题有了更深的理解。
【Code】
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 64;
ll f[N+10][N+10],n;
int k;
int main(){
//freopen("F:\\rush.txt","r",stdin);
for (int i = 1;i <= 63;i++)
for (int j = 1;j <= 63;j++)
f[i][j] = f[i-1][j-1] + 1 + f[i][j-1];
while (~scanf("%d%lld",&k,&n) && k){
k = min(k,63);
bool sol = false;
for (int i = 1; i <= 63;i++)
if (f[k][i]>=n){
printf("%d\n",i);
sol = true;
break;
}
if (!sol) puts("More than 63 trials needed.");
}
return 0;
}
【Uva 10934】Dropping water balloons的更多相关文章
- UVa 10934 DP Dropping water balloons
首先想一下特殊情况,如果只有一个气球,我们要确定高度只能从下往上一层一层地测试,因为如果气球一旦爆了,便无法测出气球的硬度. 如果气球有无数个,那么就可以用二分的方法来确定. 一般地,用d(i, j) ...
- 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵
偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...
- 【贪心+中位数】【UVa 11300】 分金币
(解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...
- 【UVa 10881】Piotr's Ants
Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...
- 【UVa 116】Unidirectional TSP
[Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【UVa 1347】Tour
[Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【UVA 437】The Tower of Babylon(记忆化搜索写法)
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【uva 1025】A Spy in the Metro
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【POJ 2976】 Dropping Tests
[题目链接] http://poj.org/problem?id=2976 [算法] 0/1分数规划 [代码] #include <algorithm> #include <bits ...
随机推荐
- Experience Design for Sexable Forum
Mars March 16, 2015
- Angry IP Scanner 获取设备的IP
给大家介绍一款软件Angry IP scanner,这款软件最大的用处就是能够扫描某一网段的各个主机的ip.通过使用发现,原理就是通过高速的ping每一个ip,假设有主机存在.就获取这个主机的user ...
- Appium - Android 对照 iOS
Appium - Android 对照 iOS 作者: Max.Bai 时间: 2014/10 Appium - Android 对照 iOS Appium 支持Android也支持iOS.可是两者还 ...
- html5播放m3u8视频,web端看直播
https://github.com/jiqing9006/hLive <!DOCTYPE html> <html> <head> <meta charset ...
- ELK搭建(filebeat、elasticsearch、logstash、kibana)
ELK部署(文章有点儿长,搭建时请到官网将tar包下载好,按步骤可以完成搭建使用) ELK指的是ElasticSearch.LogStash.Kibana三个开源工具 LogStash是负责数据的收集 ...
- storm集群安装配置
1.上传解压 2.进入到storm的conf目录 接上图 启动三台节点的zookeeper集群 启动和查看 Storm 在 nimbus.host 所属的机器上启动 nimbus 服务和 logvi ...
- 天津大学各种Latex模板共享链接
多元统计课最后Ppt里说要共享一下模板.这里给出链接 https://www.github.com/6gbluewind 注:写本文时还未上传 ************* 下午终于有网了,于是上传了一 ...
- TypeError: 'dict' object is not callabled
Traceback (most recent call last): File "/root/Desktop/JuniperBackdoor-master/censys.py", ...
- 据统计WIN10用户已经比WIN7多
数据统计机构Netmarketshare今天发布了2018年12月份最新的桌面操作系统份额报告.在看似无休止的等待之后,微软在2018年取得了最后的胜利,不仅成为市值最高的公司,而且最新的Window ...
- laravel中soapServer支持wsdl的例子
最近在对接客户的CRM系统,获取令牌时,要用DES方式加密解密,由于之前没有搞错这种加密方式,经过请教了"百度"和"谷歌"两个老师后,结合了多篇文档内容后,终于 ...