题目链接:https://vjudge.net/problem/27377/origin

题意:

  有一栋n层高的楼,并给你k个水球。在一定高度及以上将水球扔下,水球会摔破;在这个高度以下扔,水球不会摔破,并且可以捡起来再用。现在你要通过不断地试扔水球,找出在这栋楼上的第几层扔水球,恰好能让水球摔破。问你在最坏情况下,最少扔几次可以保证找出这个层数(若大于63次则输出‘More than 63 trials needed.’)。

题解:

  这个问题可以转化成:

    花费i个球,j次扔水球,最多能确定几层(也就是确切地知道在这几层中的任意一层扔水球会不会摔破)。

    也就是dp[i][j] = max floors

    最后统计一下在 i<=k , j<=63 的条件下是否存在dp[i][j] >= n,如果有,则输出符合条件的最小的 j ;如果没有则输出‘More than 63 trials needed.’。

  假设你在第x层扔了一次水球,总共分为两种情况:

  (1)水球破了,那么要找的这个高度一定在 x 及以下。扔这一次花费了1个水球和1个扔的次数,在这之后还可以往下确定dp[i-1][j-1]层。

      dp[i][j] += dp[i-1][j-1]

  (2)水球没破,那么要找的这个高度一定在 x 之上。扔这一次只花费了1个扔的次数,在这之后还可以向上确定dp[i][j-1]层。

      dp[i][j] += dp[i][j-1]

    另外,在 x 层扔的这一次本身也确定了一层。dp[j][j]还要+1

    综上:

      dp[i][j] = dp[i-1][j-1] + dp[i][j-1] + 1

  求dp,两边for循环枚举 i , j 即可。

AC Code:

// dp[i][j] = max num of decided floors
// i: num of burst balloons
// j: throwing times
// we can ammuse that we will use i balloons and throw them j times
// when throwing ith balloon at a certain floor:
// the num of floors we can still confirm:
// 1) burst: dp[i-1][j-1] (downstair)
// 2) intact: dp[i][j-1] (upstair)
// dp[i][j] = dp[i-1][j-1] + dp[i][j-1] + 1
// ans = minimum j with the dp val not less than the height of the house

#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_K 105
#define INF 10000000using namespace std;int k;
int ans;
long long n;
long long dp[MAX_K][MAX_K];int main()
{while(cin>>k>>n){if(k==0) break;memset(dp,0,sizeof(dp));ans=INF;for(int i=1;i<=k;i++){for(int j=1;j<=63;j++){dp[i][j]=dp[i-1][j-1]+dp[i][j-1]+1;if(dp[i][j]>=n) ans=min(ans,j);}}if(ans==INF) cout<<"More than 63 trials needed."<<endl;else cout<<ans<<endl;}
}

转载于:https://www.cnblogs.com/Leohh/p/7362319.html

UVa 10934 Dropping water balloons:dp(递推)相关推荐

  1. uva 10934—— Dropping water balloons

    题意:给定K个气球,然后n层楼的高度,求确定气球的硬度(站在多高能摔破) 思路:递推.dp(i,j)表示最优,那么即dp(i-1,j-1)+1最优,如果K层没有破,则把K+1看成1层继续.得到转移方程 ...

  2. 100道动态规划——17 UVA 10934 Dropping water balloons 猜数问题

    老实说我感觉这个更加像递推..而不是动态规划. 一开始对答案是很疑惑的,后来去问了dalao,dalao告诉我这是猜数问题,于是我就找关于猜数问题的资料看,发现他们本质是确实是同一个问题. 这里把链接 ...

  3. UVA - 10934 Dropping water balloons(装满水的气球)(dp)

    题意:有k个气球,n层楼,求出至少需要多少次实验能确定气球的硬度.气球不会被实验所"磨损". 分析: 1.dp[i][j]表示第i个气球,测试j次所能确定的最高楼层. 2.假设第i ...

  4. UVA10934 Dropping water balloons【DP】

    It's frosh week, and this year your friends have decided that they would initiate the new computer s ...

  5. Two Arrays(DP递推)

    You are given two integers nn and mm. Calculate the number of pairs of arrays (a,b)(a,b) such that: ...

  6. HDU 4489 (DP递推计数)

    DP 递推计数 题意: 这是一道比较神奇的题,很考验思维:有n个高低不同的人,现在需要进行排列,排列一定要满足两种方式 高低高··· 低高低··· 求出有多少排列方式. 思路: 我们的切入点是第i个人 ...

  7. 动态规划入门之dp递推~

    欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/--萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗-- 本篇文章重在递推,不 ...

  8. 【Uva 10934】Dropping water balloons

    [Link]: [Description] 等价题意: 某人在1..n内选一个数x; 然后让你去猜; 你可以问他是不是在哪个范围里; 每次会告诉你YES或者NO; 问你在最坏的情况下猜出答案需要猜多少 ...

  9. hdu 1723 DP/递推

    题意:有一队人(人数 ≥ 1),开头一个人要将消息传到末尾一个人那里,规定每次最多可以向后传n个人,问共有多少种传达方式. 这道题我刚拿到手没有想过 DP ,我觉得这样传消息其实很像 Fibonacc ...

最新文章

  1. 暴力裁员?小米回应来了,网友表示没毛病!
  2. linux之使用帮助
  3. JavaScript——对象合并解决方案
  4. Linux + RIL.pdf
  5. 使用Guava retryer优雅的实现接口重试机制
  6. 【推荐实践】RALM:实时Look-alike算法在微信看一看中的应用(附PPT下载链接)...
  7. laravel连接oracle6,Laravel 使用 Oracle 数据库
  8. Linux 按行分割文件(转载)
  9. VSCode 设置为 Monaco字体
  10. 全民写作一夜成名 Web2.0:作家造富路线图
  11. c语言韦达定理求方程解,高一上韦达定理,高次,多元方程解法.doc
  12. WebIDE 使用指南
  13. C# winform chart 饼状图的使用布局
  14. CAT 实时监控与项目集成
  15. Git LFS(Large File Storage)使用简介
  16. angularJS1 异常Error: [$injector:unpr]
  17. GVINS文章暴力翻译(仅供自学)
  18. java正则表达式初探——java.util.regex.Pattern类
  19. BZOJ3875-[Ahoi2014Jsoi2014]骑士游戏
  20. android 仿ios带弹簧效果的ScrollView

热门文章

  1. iOS 真机测试错误解决An App ID with Identifier ...is not available
  2. 如何起Linux服务器的21端口,linux下开启ftp的21号端口
  3. 数字图像处理(MATLAB)(第二版) 冈萨雷斯 学习笔记
  4. 英语六级高频词汇速记 + 2019-12-1听力 Day07
  5. 复杂网络-标准公开数据集
  6. 爬取豆瓣电影短评并使用词云简单分析top50
  7. WUSTOJ 1318: 区间的连通性(Java)
  8. 每日五题 -202110
  9. Nodejs报内部错误 TypeError: Cannot read property ‘destroy‘ of undefined的解决方法
  10. linux 升级golang版本,go语言如何升级版本