bzoj 2798 [Poi2012]Bidding 博弈论+dp

题目大意

A和B两个人在玩一个游戏,这个游戏是他们轮流操作一对整数(x,y)。
初始时(x,y)=(1,0),可以进行三种操作:

  1. 将(x,y)变成(1,x+y)。
  2. 将(x,y)变成(2x,y)。
  3. 将(x,y)变成(3x,y)。
    给定正整数n (n<=30,000),如果x+y>=n时就不能进行后两种操作。
    如果某个人操作后y>=n,他就输掉了

    分析

    当一个人操作前x+y>=n时,他就输掉了
    博弈论问题的一般方法
    可以是操作后变成一个子问题
    此题中每次操作相当于减少离n的距离
    我们考虑dp
    dp[i][j][k]表示y离n还有i,\(x=2^j*3^k\),是否必胜

    做法

    交互题
    获得对面操作后,就直接执行对面操作
    轮到自己,就选择一个让对手必败的操作

    solution
for(i=1;i<=n;i++)
for(j=20;j>=0;j--)
for(k=20;k>=0;k--){
    if(p2[j]*p3[k]>=i) f[i][j][k]=0;
    else{
        if(!f[i][j+1][k]||!f[i][j][k+1]||!f[i-p2[j]*p3[k]][0][0]) f[i][j][k]=1;
        else f[i][j][k]=0;
    }
}

转载于:https://www.cnblogs.com/acha/p/6407462.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值