Dropping water balloons UVA - 10934 (dp,状态比较难想)

题目连接:点击打开链接

题目大意:给你k个气球,n层楼,从大于气球硬度的楼层丢下会炸,小于则不会,问最小需要多少次可以确定气球硬度。

题目思路:这道题的思路有点迷,我们知道如果只有一个气球的话,只能从最下面的那层楼,一层,一层往上试,因为只有一个气球。这道题知道这些仅仅是不够的,还是没有思路的,我们经过分析发现我们很难知道气球在哪一层会爆,哪一层会不爆,这个是肯定不知道的,所以我们可以尝试不去考虑具体在哪一层会爆炸,我们容易知道,在某一层只有爆与不爆两种可能,是不是想到了什么,没错就是dp,在这里我们明显不能把楼层放在状态里面,那我们可以尝试这样定义,dp[i][j]为有i个气球,有j次机会,所能达到的最高楼层,dp[i][j] = dp[i][j-1]+dp[i-1][j-1]+1;

ac代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstring>
#include<iostream>
#include<sstream>
#include<cmath>
#include<vector>
#define LL long long
#define INF 0x3f3f3f3f
#define eps 1e-6
#include<deque>
using namespace std;
LL dp[105][66];
LL n;
int k;
int main(){
    for(int i = 1;i<=100;i++){
        for(int j =1;j<64;j++){
            dp[i][j] = dp[i-1][j-1]+1+dp[i][j-1];
        }
    }
    while(cin>>k>>n){
        if(!k)
            return 0;
        int falg = 0;
        for(int i = 1;i<=63;i++){
            if(dp[k][i]>=n){
                cout<<i<<endl;
                falg = 1;
                break;
            }
        }
        if(!falg){
            puts("More than 63 trials needed.");
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值