zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    
  • 相关阅读:
    javascript 介绍
    命令提示符(命令行)
    node(1) hello world
    用Vgg16来提取特征
    VGG16学习
    注意力模型
    统计学习方法
    数字图像处理(五)
    数字图像处理(四)
    BN
  • 原文地址:https://www.cnblogs.com/acha/p/6407462.html
Copyright © 2011-2022 走看看