您的位置:首页 > 运维架构

UVa 10934 - Dropping water balloons(DP)

2015-08-29 18:01 357 查看
给出nn个相同的气球,kk层楼,问最少几次试验可以知道气球最高从多少层扔下不会爆。

用d[i][j]d[i][j]表示用ii个球,实验jj次所能确定的最高楼层数,对于每一次试验分爆和不爆两种情况讨论:

1、爆了,转移到d[i−1][j−1]+1d[i-1][j-1]+1,用掉了1个球和一次试验机会。

2、没爆,将当前测试层数的上一层当做第1层继续进行试验,转移到d[i][j−1]d[i][j-1]。

得出转移方程d[i][j]=d[i−1][j−1]+1+d[i][j−1]d[i][j]=d[i-1][j-1]+1+d[i][j-1]。

好久之前做的题了,具体思路见紫书。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef unsigned long long ULL;
ULL d[110][65],k,n;
int main(){
for(int i=1;i<110;++i)
for(int j=1;j<65;++j)
d[i][j]=d[i-1][j-1]+1+d[i][j-1];
while(~scanf("%llu%llu",&k,&n)&&k){
int ans = 0;
for(int i=64;i>=0;--i)
if(d[k][i]<n){
ans=i+1;
break;
}
if(ans<=63) printf("%d\n",ans);
else puts("More than 63 trials needed.");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: