• 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次测试就直接往上测试就行,最多能测试d(i, j-1)层

    所以d(i, j) = d(i-1, j-1) + 1 + d(i, j-1)

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 typedef unsigned long long LL;
     8 
     9 const int maxn = 100 + 1;
    10 const int maxm = 64;
    11 
    12 LL a[maxn][maxm];
    13 
    14 int n;
    15 LL h;
    16 
    17 int main()
    18 {
    19     for(int i = 1; i < maxn; i++)
    20         for(int j = 1; j < maxm; j++)
    21             a[i][j] = a[i-1][j-1] + 1 + a[i][j-1];
    22 
    23     while(cin >> n >> h && n)
    24     {
    25         int i;
    26         for(i = 1; i < maxm; i++) if(a[n][i] >= h) break;
    27         if(i < maxm) printf("%d
    ", i);
    28         else puts("More than 63 trials needed.");
    29     }
    30 
    31     return 0;
    32 }
    代码君
  • 相关阅读:
    STM32-串口通信
    STM32-系统计时器(systick)
    字符串操作常用的函数
    基本MarkDown语法
    结构
    python入门
    贪心算法小结
    POJ1631_高深DP
    POJ3046ANT_COUNTING
    POJ1742coins
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4774149.html
Copyright © 2020-2023  润新知