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

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

题意:有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]层

*/

 #include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<vector>
#include<map>
#include<stack>
#include<string> using namespace std; long long n;
int k;
long long f[][]; void solve(){
if (f[k][]<n){
printf("More than 63 trials needed.\n");
return;
}
for (int i=;i<;i++){
if (f[k][i]>=n){
printf("%d\n",i);
break;
}
}
} int main(){
memset(f,,sizeof(f));
for (int i=;i<=;i++){
for (int j=;j<;j++){
f[i][j]=f[i-][j-]+f[i][j-]+;
}
}
while (scanf("%d%lld",&k,&n)==){
if (k==) return ;
solve();
}
return ;
}
/*
2 100
10 786599
4 786599
60 1844674407370955161
63 9223372036854775807
0 0
*/
05-11 19:36