One Person - POJ 1243 dp

One Person
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 2169 Accepted: 1453

Description

In the game show "The Price is Right", a number of players (typically 4) compete to get on stage by guessing the price of an item. The winner is the person whose guess is the closest one not exceeding the actual price. Because of the popularity of the one-person game show "Who Wants to be a Millionaire",the American Contest Management (ACM) would like to introduce a one-person version of the "The Price is Right". In this version, each contestant is allowed G (1 <= G <= 30) guesses and L (0 <= L <= 30)lifelines. The contestant makes a number of guesses for the actual price. After each guess, the contestant is told whether it is correct, too low, or too high. If the guess is correct, the contestant wins. Otherwise,he uses up a guess. Additionally, if his guess is too high, a lifeline is also lost. The contestant loses when all his guesses are used up or if his guess is too high and he has no lifelines left. All prices are positive integers. 
It turns out that for a particular pair of values for G and L, it is possible to obtain a guessing strategy such that if the price is between 1 and N (inclusive) for some N, then the player can guarantee a win.The ACM does not want every contestant to win, so it must ensure that the actual price exceeds N.At the same time, it does not want the game to be too diffcult or there will not be enough winners to attract audience. Thus, it wishes to adjust the values of G and L depending on the actual price. To help them decide the correct values of G and L, the ACM has asked you to solve the following problem.Given G and L, what is the largest value of N such that there is a strategy to win as long as the price is between 1 and N (inclusive)? 

Input

The input consists of a number of cases. Each case is specified by one line containing two integers G and L, separated by one space. The end of input is specified by a line in which G = L = 0. 

Output

For each case, print a line of the form: 
Case c: N 
where c is the case number (starting from 1) and N is the number computed. 

Sample Input

3 0
3 1
10 5
7 7
0 0

Sample Output

Case 1: 3
Case 2: 6
Case 3: 847
Case 4: 127

题意:一个人有G次机会和L次生命,每次可以猜一个数,当猜的这个数大于正解时,会扣除一个生命,问这个数最大为多少时能保证猜中。

思路:你每次肯定是要猜这样一个数m,使得1到m-1可以用G-1,L-1去猜中,那么你最多可以猜到的是m+dp[G-1][L]。

AC代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[40][40];
int main()
{ int t=0,i,j,k,a,b;
  for(i=1;i<=30;i++)
  { dp[i][0]=i;
    for(j=1;j<=i;j++)
     dp[i][j]=dp[i-1][j-1]+1+dp[i-1][min(i-1,j)];
  }
  while(~scanf("%d%d",&a,&b) && a)
  { b=min(a,b);
    printf("Case %d: %d\n",++t,dp[a][b]);
  }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值