1525. One Person "The Price is Right"

题目大意:每个人允许猜 G 次,有 L 生命线。猜低或猜高了,耗费一次猜得机会,猜高了,还

             会浪费一生命线。


   先从搜索考虑。设f(g,l)表示有g次机会,l条生命线时可以猜到的最大价格范围。

      那么,f(g,l)应该由三段范围组成:猜低了,用剩下的机会还能猜出f(g-1,l)范围的价格;

     猜得正好,可以猜出1个价格;猜高了,用剩下的机会还能猜出f(g-1,l-1)范围的价格。

      拼起来,就有f(g,l)=f(g-1,l)+1+f(g-1,l-1)。

      然后考虑一下边界情况:当g=0时,游戏结束了,所以f(0,l)=0;

      当l=0时,价格不能再猜高了,只能往下再摸索g次,所以f(g,0)=g。

      这样就可以用搜索来解决这个题了。再转成记忆化搜索就行了。

      也可以观察出阶段,自底向上推。


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
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int g,l,a[31][31],k=1,i,j;
	memset(a,0,sizeof(a));
	for(i=1;i<31;i++)
		a[i][0]=i;
	for(i=1;i<31;i++)
		for(j=1;j<31;j++)
			a[i][j]=a[i-1][j]+1+a[i-1][j-1];//分别是猜低了,对,高三种情况
	while(cin>>g>>l&&g||l)
	{
		cout<<"Case "<<k++<<": "<<a[g][l]<<endl;
	}
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值