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
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define INF 0x3f3f3f3f
#define eps 1e-6
#include
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<


你可能感兴趣的:(dp)