• uva10934 Dropping water balloons


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

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

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

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

    /*

    当前楼层破是f[i-1][j-1]+1,不破是f[i-1][j-1]+f[i][j-1]+1,最后求出来的范围是这两个的最大值。

    破的话肯定小于求出来的范围,不破的话答案应该实在保证破能被确定出来的基础上继续向上找f[i][j-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.
    ");
    22             return;
    23     }
    24     for (int i=0;i<64;i++){
    25             if (f[k][i]>=n){
    26                     printf("%d
    ",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 */
    View Code
  • 相关阅读:
    hdu 1260 Tickets
    hdu 4738 Caocao's Bridges(桥的最小权值+去重)
    找规律
    C语言快速排序
    数组的初始化方法
    C语言选择排序
    副本机制
    安装完Kali的后续操作
    Bool盲注
    Python中的列表
  • 原文地址:https://www.cnblogs.com/baby-mouse/p/4607491.html
Copyright © 2020-2023  润新知