题目连接:点击打开链接
题目大意:给你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<