zoukankan      html  css  js  c++  java
  • Dropping water balloons UVA

    Dropping water balloons

     UVA - 10934

    题意:

    可以说是很懵比了。。。

    上一个题有相似之处,就是我们需要判断的结果是一个未知量。如本题气球的硬度,可能为1,2,3,------,n,n+1。

    最坏情况需要测到n楼才知道结果。题目要求确定气球硬度,我们要考虑所有情况。【即我们要求的是最少测几次才可以测到n楼。】

    用d[i][j]表示i个气球j次试验最多测到d[i][j]楼(即运气足够好的情况下可以测到几层楼)【这也是题目要求的,最少几次!!】

    (上面这两条红字放一起有点难以理解)


    我们首先要求的是第一次最好在哪一层楼进行测试

    先设第一次为k楼最好(以下八行都是在这个假设下进行的,记为假设一吧)

    如果第一次气球就破,则说明i-1个气球j-1次试验测(即d[i-1][j-1])需要测到k-1层楼才可以,即d[i-1][j-1]==k-1。证明如下:

    反证法:

    假设d[i-1][j-1]=x<k-1,则x楼到k楼之间是断层,说明第一次测试的k楼没有意义,k不是最好,与假设一矛盾,故d[i-1][j-1]>=k-1

    假设d[i-1][j-1]=x>k-1,即d[i-1][j-1]>=k,说明i-1个气球j-1次就可以测到k+层楼了,第一次测试的k层楼没有意义,k不是最好,与假设一矛盾,故d[i-1][j-1]<=k-1

    综上,d[i-1][j-1]==k-1。

    即i个气球j次试验第一次最好在k=d[i-1][j-1]+1楼进行测试

    同时这也是第一次气球就破的情况下最多可以测到的楼层数d[i][j]=k=d[i-1][j-1]+1。


    如果第一次气球不破,那么我们还剩下i个气球j-1次试验,最多可以再测d[i][j-1]层楼(要仔细考虑,和高度无关),再加上之前的k楼

    即第一次气球不破的情况下最多可以测到的楼层数d[i][j]=d[i][j-1]+k=d[i][j-1]+d[i-1][j-1]+1。

    所以,综上分析,i个气球j次试验最多可以测到d[i][j]=d[i][j-1]+k=d[i][j-1]+d[i-1][j-1]+1。


    现在回到题目,【即我们要求的是最少测几次才可以测到n楼。】

    根据递推公式预处理d[i][j]表。

    气球数目为k,楼层为n,只需枚举次数j,当d[k][j]>=n时j即为所求解。

     1 #include <cstdio>
     2 #include <bits/stdc++.h>
     3 using namespace std;
     4 #define LL long long
     5 LL f[110][65];
     6 int k;
     7 LL n;
     8 
     9 int main()
    10 {
    11     memset(f,0,sizeof(f));
    12     for(int i=1;i<=100;i++)
    13         for(int j=1;j<64;j++)
    14             f[i][j]=f[i-1][j-1]+1+f[i][j-1];
    15     while(scanf("%d%lld",&k,&n)&&k)
    16     {
    17         if(f[k][63]<n)
    18         {
    19              puts("More than 63 trials needed.");
    20              continue;
    21         }
    22         for(int i=1;i<=63;i++) if(f[k][i]>=n)
    23         {
    24             printf("%d
    ",i);
    25             break;
    26         }
    27     }
    28     return 0;
    29 }
    View Code
  • 相关阅读:
    url请求中的中文字符编解码处理,encodeURI()、encodeURIComponent()区别
    oracle批量插入数据优化 与 sqlldr
    记一次oracle事务被锁,进程杀不掉 User session ID does not exist
    PS || PhotoShop2019破解版下载
    Layui写后台登录页面 蓝奏云 下载
    RouterOS v6.42.12限制VLAN网速
    ZeroNet 示例
    微信多开器 Python窗口编程 隔离运行(一)
    Chrono-Chrome下载管理插件
    Proxyee Down || Pandownload 蓝奏云下载
  • 原文地址:https://www.cnblogs.com/yijiull/p/7422174.html
Copyright © 2011-2022 走看看