【Link】:

【Description】



等价题意:

某人在1..n内选一个数x;

然后让你去猜;

你可以问他是不是在哪个范围里;

每次会告诉你YES或者NO;

问你在最坏的情况下猜出答案需要猜多少次;

且猜的数字大于x的次数不能超过k次.

【Solution】



动态规划.

设f[i][j]表示前i个水球,做了j次试验;能得到的最大高度;

这里的f[i][j];

指的是,如果问的数字是1..f[i][j],的话,用i个水球都能够通过试验猜到.

(这里的状态f[i][j]中,j>=i也是可行的状态的..)

考虑第一次试验;

假设从高度x落下;



1.如果水球破了

则要保证如果问的数字是1..x-1的话,用i-1个球和j-1次试验能猜得到.

那么,x的最大值应该是f[i-1][j-1]+1;

2.如果水球没破

则我们还剩下i个球以及j-1次试验的机会;

x的最大值只能是f[i-1][j-1]+1

(这里,我们必须也要照顾到球破了的情况才行..因为是最坏情况)

所以,如果在球没破的时候,我们最多能够处理

x+f[i][j-1]也即1..f[i-1][j-1]+1+f[i][j-1]

这样就能得到状态转移方程了;

f[i][j] = f[i-1][j-1]+1+f[i][j-1]

这样如果想的数字在1..f[i][j]这个范围内都能保证猜得到.

然后在f[k][j],j∈[1..63]中找最小的满足f[k][j]>=n的j;

输出就好;

如果没找到,就输出无解;


UPD1

转移方程的解释:

这里如果球破了的话,1..f[i-1][j-1]能得到;

球没破的话,f[i-1][j-1]+2..f[i][j]这一段也能用剩下的实验次数得到.

【NumberOf WA】



1



【Reviw】



用数学的递推,取代感性的认知.

对问题有了更深的理解。



【Code】

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 64; ll f[N+10][N+10],n;
int k; int main(){
//freopen("F:\\rush.txt","r",stdin);
for (int i = 1;i <= 63;i++)
for (int j = 1;j <= 63;j++)
f[i][j] = f[i-1][j-1] + 1 + f[i][j-1];
while (~scanf("%d%lld",&k,&n) && k){
k = min(k,63);
bool sol = false;
for (int i = 1; i <= 63;i++)
if (f[k][i]>=n){
printf("%d\n",i);
sol = true;
break;
}
if (!sol) puts("More than 63 trials needed.");
}
return 0;
}

【Uva 10934】Dropping water balloons的更多相关文章

  1. UVa 10934 DP Dropping water balloons

    首先想一下特殊情况,如果只有一个气球,我们要确定高度只能从下往上一层一层地测试,因为如果气球一旦爆了,便无法测出气球的硬度. 如果气球有无数个,那么就可以用二分的方法来确定. 一般地,用d(i, j) ...

  2. 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵

    偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...

  3. 【贪心+中位数】【UVa 11300】 分金币

    (解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...

  4. 【UVa 10881】Piotr's Ants

    Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...

  5. 【UVa 116】Unidirectional TSP

    [Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  6. 【UVa 1347】Tour

    [Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  7. 【UVA 437】The Tower of Babylon(记忆化搜索写法)

    [题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  8. 【uva 1025】A Spy in the Metro

    [题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  9. 【POJ 2976】 Dropping Tests

    [题目链接] http://poj.org/problem?id=2976 [算法] 0/1分数规划 [代码] #include <algorithm> #include <bits ...

随机推荐

  1. xcode 及 MAC 经常使用快捷键

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 黑苹果键盘 ...

  2. POJ 3254 Corn Fields 状态压缩DP (C++/Java)

    id=3254">http://poj.org/problem? id=3254 题目大意: 一个农民有n行m列的地方,每一个格子用1代表能够种草地,而0不能够.放牛仅仅能在有草地的. ...

  3. Visual Assist X 10.8.2036的Crack破解补丁.2014.05.22 (General release.)

    说起来,VA公布上一个Genreal Release版本号已经是过春节那阵子时候的事了,时间过得真快. VA小组又给我们带来了新版本号的Visual Assist编码助手的 2036 版本号, 这个版 ...

  4. Innosetup

    卸载的同时删除日志,卸载的时候判断程序是否正在运行,regsvr32 1.卸载程序的时候如何判断程序是否正在运行 http://bbs.csdn.net/topics/370097914 2.强制删除 ...

  5. python中对单例模式的理解

    class Foo(object): instance = None def __init__(self): pass def process(self): ' @classmethod #版本1单例 ...

  6. 数论之证明数n等于其因数的欧拉函数值之和

    定理: 任何正整数n等于其因数的欧拉函数值之和,即∑d|nφ(d)=n 证明: 设一个集合{1/n,2/n,3/n,...,(n-1)/n,n/n} 对于上述的分式集合,若我们都将其化简至最简形式,设 ...

  7. 安卓开发--AsyncTask2

    package com.cnn.imageasyncdemo01; import android.app.Activity; import android.content.Intent; import ...

  8. POJ 2528 线段树

    坑: 这道题的坐标轴跟普通的坐标轴是不一样的-- 此题的坐标轴 标号是在中间的-- 线段树建树的时候就不用[l,mid][mid,r]了(这样是错的) 直接[l,mid][mid+1,r]就OK了 D ...

  9. [POI2005]DWU-Double-row(图论?)

    题意 2n 个数站成两排(每个数在 2n个数中最多出现两遍),一次操作可以交换任意一列中两个数,求使每行数不重复的最少操作数. (n<=50000) 题解 说实话,我真没想到图论.(我太菜了) ...

  10. python note #1

    To record my process of studying python and to practice my English meanwhile, I'd like to start writ ...