10934 - Dropping water balloons(DP)
这道题的思路非常难想。 问你须要的最少实验次数,这是非常难求解的。并且我们知道的条件仅仅有三个。k、n、实验次数 。
所以我们最好还是改变思路,转而求最高所能确定的楼层数 。 那么用d[i][j]表示用i个球,实验j次所能确定的最高楼层数 。
那么我们如果第j次实验是在k楼,有两种可能: 1、球破了。那么状态怎样转移? 用了一个球,用了一次实验机会。所以最优情况一定是从d[i-1][j-1]转移过来的,所以这一次实验向下所能确定的最大楼层数为d[i-1][j-1] + 1 ;2、球没有破。那么代价仅仅是用掉了一次实验机会,所以向上最高仍能确定d[i][j-1]层 。
这样d[i][j]就成功的将状态转移到子状态的最优解上了 。 那么这将也是最优解,由于他们具有相似的结构 。
代码例如以下:
#include<bits/stdc++.h>
using namespace std;
unsigned long long k,n,d[105][65];
int main() {
while(cin>>k>>n&&k) {
memset(d,0,sizeof(d));
for(int i=1;i<=k;i++) {
for(int j=1;j<=64;j++) {
d[i][j] = d[i-1][j-1] + 1 + d[i][j-1];
}
}
int ans = 0;
for(int i=64;i>=1;i--) {//搜索最少实验次数。假设64满足条件。则超过了实验次数限制
if(d[k][i] < n) { ans = i+1; break; }
if(d[k][i] == n) { ans = i; break; }
}
if(ans<=63) printf("%d\n",ans);
else printf("More than 63 trials needed.\n");
}
return 0;
}
10934 - Dropping water balloons(DP)的更多相关文章
- UVa 10934 Dropping water balloons:dp(递推)
题目链接:https://vjudge.net/problem/27377/origin 题意: 有一栋n层高的楼,并给你k个水球.在一定高度及以上将水球扔下,水球会摔破:在这个高度以下扔,水球不会摔 ...
- UVA - 10934 Dropping water balloons(装满水的气球)(dp)
题意:有k个气球,n层楼,求出至少需要多少次实验能确定气球的硬度.气球不会被实验所“磨损”. 分析: 1.dp[i][j]表示第i个气球,测试j次所能确定的最高楼层. 2.假设第i-1个气球测试j-1 ...
- Dropping water balloons (入门dp)
2017-08-12 18:36:24 writer:pprp 最近刚刚接触动态规划,感觉状态的查找和转移自己很难想到,都是面向题解编程,但是一开始都是这样了,只有相信我可以独立自己解决动态规划这类问 ...
- UVA - 10934 Dropping water balloons (dp,逆向思维)
题目链接 题目大意:给你n个规格一样的气球和一栋大楼的高度,求最少试验几次能测出气球最高在哪一层掉下来不破. 如果这道题想用(dp[i][j]=用i个气球测出j高度的楼需要几次)来作为状态的话,那你就 ...
- uva 10934 Dropping water balloons(转载)
本文转载自http://blog.csdn.net/shuangde800/article/details/11273123 题意 你有k个一模一样的水球,在一个n层楼的建筑物上进行测试,你想知道水球 ...
- uva 10934 Dropping water balloons
你有k个一模一样的水球,在一个n层楼的建筑物上进行测试,你想知道水球最低从几层楼往下丢可以让水球破掉.由于你很懒,所以你想要丢最少次水球来测出水球刚好破掉的最低楼层.(在最糟情况下,水球在顶楼也不会破 ...
- unity3d 制造自己的水体water effect(二)
前篇:unity3d 制造自己的水体water effect(一) 曲面细分:Unity3d 使用DX11的曲面细分 PBR: 讲求基本算法 Unity3d 基于物理渲染Physically-Base ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
随机推荐
- LiveScript 函数
The LiveScript Book The LiveScript Book 函数 定义函数是非常轻量级的. 1.(x, y) -> x + y2.3.-> # an empty ...
- Linux Shell系列教程之(八)Shell printf命令详解
本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell p ...
- centos的iptables设置
首先先说一下iptables是什么东西,可以简单把它理解成一个软件防火墙,一个访问控制列表,规定好哪个端口可以进来东西,哪个端口可以送出东西. 那如果不配置iptables或者iptables配置出错 ...
- 二进制<1>
Matrix67:位运算简介及实用技巧(一) 基础篇 什么是位运算? 程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.比如,and运 ...
- 深入理解Java中的volatile关键字
在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized ...
- el-select绑定值为对象时,报错[Vue warn]: <transition-group> children must be keyed: <ElTag>
解决方法: <el-select v-model="syncParams.toSlaveList" multiple value-key="ip" pla ...
- luoguP1040 区间DP(记忆化 加分二叉树
dp[l][r]记录中序序列为l, l+1..r的最大加分值 root[l][r]记录这个序列的根节点 转移 i 为根节点 dp[l][r] = max(dp[l][i-1]*dp[l+1][r]+a ...
- vue.js源码学习分享(三)
/** * Mix properties into target object.//把多个属性插入目标的对象 */ function extend (to, _from) { for (var key ...
- luogu 1142 轰炸 最多共线点数
题目链接 题意 给定\(n(n\leq 700)\)个点,问共线的点最多有多少个? 思路 \(O(n^3)\):枚举两个顶点确定一条直线,再看有多少个顶点在这条直线上.讲道理会T. \(O(n^2lo ...
- Scrapy学习-17-暂停和重启
Scrapy爬虫暂停和重启 在当前项目下新建一个用于存储中间过程变量的目录 注意不同的spider不能共用一个目录 同一个spider每次运行时也必须使用新的目录 mkdir <spider_p ...