• HDU 4023 (博弈 贪心 模拟) Game


    如果硬要说这算是博弈题目的话,那这个博弈是不公平博弈(partizan games),因为双方面对同一个局面做出来的决策是不一样的。

    我们平时做的博弈都是公平博弈(impartial games),所以在这道题里面,那些必胜必败状态,SG函数SG定理都派不上用场了。

    但是,这道题是可以贪心的。

    比如第一个图案对于Alice来说是安全稳定的,因为Bob不会跟他去抢位置,所以Alice可以省到最后去放。同样地,Bob可以将第2个图案省到最后再去放。

    比如说第15个图案,如果能抢先占到的话会很划算的,因为如果一方占到,不光对方放不了了,自己还会多一个稳定位。

    更详细的分析见这:http://www.cnblogs.com/staginner/archive/2011/09/10/2173317.html

    我发现大家的思路都是按照这个来的。

     1 #include <cstdio>
     2 
     3 int a[16];
     4 
     5 int main()
     6 {
     7     //freopen("in.txt", "r", stdin);
     8 
     9     int T; scanf("%d", &T);
    10     for(int kase = 1; kase <= T; ++kase)
    11     {
    12         for(int i = 1; i <= 15; i++) scanf("%d", &a[i]);
    13         int now = 0, A = a[1] * 2, B = a[2] * 2;
    14         if(a[15] % 2 != 0) { A++; now = 1; }
    15         int ta = a[5] + a[6], tb = a[3] + a[4];
    16         if(ta > tb)//Alice抢5,6, Bob抢3,4
    17         {
    18             ta -= tb;
    19             if(ta % 2 != 0)
    20             {
    21                 if(now == 0) A += ta/2 + 1;
    22                 else A += ta / 2;
    23                 now = 1 - now;
    24             }
    25             else A += ta / 2;
    26         }
    27         else if(ta < tb)
    28         {
    29             tb -= ta;
    30             if(tb % 2 != 0)
    31             {
    32                 if(now == 0) B += tb / 2;
    33                 else B += tb/2 + 1;
    34                 now = 1 - now;
    35             }
    36             else B += tb / 2;
    37         }
    38         //两人瓜分11,12,13,14
    39         int t = a[11] + a[12] + a[13] + a[14];
    40         if(t % 2 != 0) now = 1 - now;
    41         //Alice抢7,8, Bob抢9,10
    42         ta = a[7] + a[8]; tb = a[9] + a[10];
    43         if(ta < tb)
    44         {
    45             tb -= ta;
    46             if(tb % 2 != 0)
    47             {
    48                 if(now == 0) B += tb/2 + 1;
    49                 else B += tb / 2;
    50                 now = 1 - now;
    51             }
    52             else B += tb / 2;
    53         }
    54         else if(ta > tb)
    55         {
    56             ta -= tb;
    57             if(ta % 2 != 0)
    58             {
    59                 if(now == 0) A += ta / 2;
    60                 else A += ta/2 + 1;
    61                 now = 1 - now;
    62             }
    63             else A += ta / 2;
    64         }
    65 
    66         bool win;
    67         if(now == 0) win = B >= A ? false : true;
    68         else win = A >= B ? true : false;
    69         printf("Case #%d: %s
    ", kase, win ? "Alice" : "Bob");
    70     }
    71 
    72     return 0;
    73 }
    代码君
  • 相关阅读:
    好久没有写博客了
    老师网站 回顾及复习 https://www.linuxprobe.com/ (linux就该这么学 电子版)
    这周要考试了,还没有时间干其它的了,
    linux学习第十九天 (Linux就该这么学) 结课了
    linux学习第十八天 (Linux就该这么学)
    linux学习第十七天 (Linux就该这么学)
    Spanner's Correctness Constraints on Transactions
    Linearizability
    HDFS vs GFS
    Raft
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4418387.html
Copyright © 2020-2023  润新知