描述:你有一栋n层的大楼和k个球,询问至少需要多少次确定球的硬度
分析:对于球的硬度,即是在高度为i时,球没碎掉,而在高度为i+1时,球碎掉了,此时便可以确定球的硬度为i.
主要是对于题目的理解:最坏情况是在最后一层但你不知道 约束在于球的个数有限制
完了分类:能否破掉进行转移
Code:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<vector>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
const int N=1e2+10,M=63+10;
unsigned long long k,n,
f[N][M];//i个球,j次实验
void init() {
memset(f,0,sizeof(f));
for(int i=1;i<=100;++i)
for(int j=1;j<=63;++j)
f[i][j]=f[i-1][j-1]+1+f[i][j-1];
}
int main() {
init();
while(scanf("%lld%lld",&k,&n)&&k) {
int ans=-1;
fo(i,1,63) if(f[k][i]>=n) {ans=i;break;}
if(ans==-1) printf("More than 63 trials needed.\n");
else printf("%d\n",ans);
}
return 0;
}