首页 技术 正文
技术 2022年11月14日
0 收藏 372 点赞 2,172 浏览 1019 个字

题意:

给你k个水球n层楼(n很大) 现在做实验在楼上向下丢水球,若水球没破可以重新丢,求把所有水球弄破的最小试验次数。

分析:

开始完全没思路啊。从正面求没法做不会表示状态,做实验是只能从第一层,一层层向上试,应该dp[i][j]有i个水球,做j次实验能达到的最高楼层数,考虑到求破没破的情况若球破了,可以向下走,没破向上走dp[i][j]=dp[i-1][j-1]+1+dp[i][j-1];

最后取第一大于n的就是答案

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define read freopen("in.txt", "r", stdin)
const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod = ;
int k;
ll n,dp[][];
void solve(){
memset(dp,,sizeof(dp));
for(int i=;i<;++i)
for(int j=;j<;++j)
dp[i][j]=dp[i-][j-]++dp[i][j-];
int f=;
k=min(k,);
for(int i=;i<;++i){
if(dp[k][i]>=n){
f=;
printf("%d\n",i);
break;
}
}
if(!f)printf("More than 63 trials needed.\n");
}
int main()
{
while(~scanf("%d%lld",&k,&n)&&k){
solve();
}
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,997
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,356
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,139
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848