zoj 1503 - One Person "The Price is Right"

题目:有一个数字让你猜,你有k次机会,并且有k个保险如果猜的低了会高度你低了,

            高了会告诉你高了,并且失去一k保险(k=0时猜高了就会失败),现在问你能猜的数字范围。

分析:dp,二维动态规划。按保险k和猜的机会n递增的方向dp。

            状态:f(G,L)为有G次猜的机会,L个保险时确定的数字范围(1~N);

            转移方程:F(G,L)= G(G-1,L)+ 1 + F(G-1,L-1){ 猜低 + 猜中 + 猜高 };

            边界条件:如果没有失败机会的话,只能从1开始向后猜;

说明:(2011-10-03 16:32)。

#include <iostream>
#include <cstdlib>

using namespace std;

long long F[ 31 ][ 31 ];

int main()
{
    for ( long long i = 0 ; i <= 30 ; ++ i )
        F[ i ][ 0 ] = i;
    for ( int i = 0 ; i <= 30 ; ++ i )
        F[ 0 ][ i ] = 0L;
    for ( int i = 1 ; i <= 30 ; ++ i )
    for ( int j = 1 ; j <= 30 ; ++ j )
        F[ i ][ j ] = F[ i-1 ][ j ]+F[ i-1 ][ j-1 ]+1;
    int G,L,C = 1;

    while ( cin >> G >> L && ( G || L ) )
        cout << "Case " << C++ << ": " << F[ G ][ L ] << endl;
    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值