uva10934 Dropping water balloons

//好久没做题 一直没状态 然后刷了个水题玩玩

//寒假集训和校赛都做到了类似的题目 然而当时并不会 (其实现在也不会

题意:有k个气球和一个n层高的楼,气球有硬度,在某曾会恰好摔碎,问至少多少次实验可以求出来恰好摔碎的楼层。

解:分两种情况讨论:当前楼层破,当前楼层不破,然后f[i][j]表示i个气球实验j次能测到的最高楼层,于是乎f[i][j]=j[i-1][j-1]+f[i][j-1]+1

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<queue>
 8 #include<vector>
 9 #include<map>
10 #include<stack>
11 #include<string>
12
13 using namespace std;
14
15 long long n;
16 int k;
17 long long f[101][101];
18
19 void solve(){
20     if (f[k][63]<n){
21             printf("More than 63 trials needed.\n");
22             return;
23     }
24     for (int i=0;i<64;i++){
25             if (f[k][i]>=n){
26                     printf("%d\n",i);
27                     break;
28             }
29     }
30 }
31
32 int main(){
33     memset(f,0,sizeof(f));
34     for (int i=1;i<=100;i++){
35             for (int j=1;j<64;j++){
36                     f[i][j]=f[i-1][j-1]+f[i][j-1]+1;
37             }
38     }
39     while (scanf("%d%lld",&k,&n)==2){
40             if (k==0) return 0;
41             solve();
42     }
43     return 0;
44 }
45 /*
46 2 100
47 10 786599
48 4 786599
49 60 1844674407370955161
50 63 9223372036854775807
51 0 0
52 */

时间: 2024-10-10 08:25:07

uva10934 Dropping water balloons的相关文章

Dropping water balloons UVA - 10934(递推)

Dropping water balloons UVA - 10934 题意: 可以说是很懵比了... 和上一个题有相似之处,就是我们需要判断的结果是一个未知量.如本题气球的硬度,可能为1,2,3,------,n,n+1. 最坏情况需要测到n楼才知道结果.题目要求确定气球硬度,我们要考虑所有情况.[即我们要求的是最少测几次才可以测到n楼.] 用d[i][j]表示i个气球j次试验最多测到d[i][j]楼(即运气足够好的情况下可以测到几层楼)[这也是题目要求的,最少几次!!] (上面这两条红字放一

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.球没有破.那么

UVa 10934 DP Dropping water balloons

首先想一下特殊情况,如果只有一个气球,我们要确定高度只能从下往上一层一层地测试,因为如果气球一旦爆了,便无法测出气球的硬度. 如果气球有无数个,那么就可以用二分的方法来确定. 一般地,用d(i, j)表示用i个气球实验j次所能确定的楼层的最大高度. 我们假设第一个气球从第k层扔下, 如果气球爆了,那么剩下的i-1个气球实验j-1次,要能在下面的k-1层确定气球的硬度.所以这个k最大取d(i-1, j-1)+1 气球没爆,那么第1~k层就完全不用管了,i个气球剩下的j-1次测试就直接往上测试就行,

Dropping water balloons (入门dp)

2017-08-12 18:36:24 writer:pprp 最近刚刚接触动态规划,感觉状态的查找和转移自己很难想到,都是面向题解编程,但是一开始都是这样了,只有相信我可以独立自己解决动态规划这类问题: 题意:给你N个水球,M个楼 水球可能在某个楼层上释放就会破裂,问最少在几次内就可以得到水球破裂的临界楼层 如果次数大于63那就输出:More than 63 trials needed. 状态分析: dp[i][j] : 表示在目前有i个水球,还有j次释放机会时最多可以测到第几层 状态转移:

UVa 10934 - Dropping water balloons(DP)

给出n个相同的气球,k层楼,问最少几次试验可以知道气球最高从多少层扔下不会爆. 用d[i][j]表示用i个球,实验j次所能确定的最高楼层数,对于每一次试验分爆和不爆两种情况讨论: 1.爆了,转移到d[i?1][j?1]+1,用掉了1个球和一次试验机会. 2.没爆,将当前测试层数的上一层当做第1层继续进行试验,转移到d[i][j?1]. 得出转移方程d[i][j]=d[i?1][j?1]+1+d[i][j?1]. 好久之前做的题了,具体思路见紫书. #include<cstdio> #inclu

uva 10934 Dropping water balloons(转载)

本文转载自http://blog.csdn.net/shuangde800/article/details/11273123 题意 你有k个一模一样的水球,在一个n层楼的建筑物上进行测试,你想知道水球最低从几层楼往下丢可以让水球破掉.由于你很懒,所以你想要丢最少次水球来测出水球刚好破掉的最低楼层.(在最糟情况下,水球在顶楼也不会破)你可以在某一层楼丢下水球来测试,如果水球没破,你可以再捡起来继续用. Input 输入的每一行包含多组测试,每组测试为一行.每组测试包含两个整数 k 和 n, 1 <

dp题目列表

10271 - Chopsticks 10739 - String to Palindrome 10453 - Make Palindrome 10401 - Injured Queen Problem 825 - Walking on the Safe Side 10617 - Again Palindrome 10201 - Adventures in Moving - Part IV 11258 - String Partition 10564 - Paths through the Ho

[SinGuLaRiTy] 动态规划题目复习

[SinGuLaRiTy-1026] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [UVA 1025] A Spy in the Metro 题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发,并在最后一站的间谍碰头.玛利亚知道有一个强大的组织正在追踪她,她知道如果一直呆在一个车站,她会有很大的被抓的风险,躲

Water Problem

water problem 发布时间: 2015年10月10日 15:34   时间限制: 1000ms   内存限制: 256M 描述 题意很简单 给你N个数, Q个查询 每次查询给你一个区间[L, R] 你要找出 [L, R] 这个区间里面取模M后的最大值. 输入 第一行一个T,表示测试数据组数.第二行两个整数N, M (1<=N<=10^5, 1<=M<=10^9).第三行给你N个整数 整数范围在1到10^9之间.第四行给你一个整数Q. ( 1<=Q<=10^5)