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\n", kase, win ? "Alice" : "Bob");
70     }
71
72     return 0;
73 }

代码君

时间: 2024-10-11 17:33:09

HDU 4023 (博弈 贪心 模拟) Game的相关文章

hdu 4915 Parenthese sequence (贪心+模拟)

题目大意: 一个序列中有左括号和右括号,还有问号,问号可以任意转换成左右括号. 问这个序列有多少种情况的转变使得这个序列变成合法的括号匹配序列. 思路分析: 首先我们分析一下,如何使得一个序列是合法的括号匹配序列. 我们很容易想到的是用栈模拟匹配过程. 当遇到左括号就进栈,当遇到右括号就让栈顶的左括号出栈. 那么在模拟的过程中,造成这个序列的不合法的原因只有当右括号来的时候,此时的栈已经为空. 这里补充一句,一旦一个序列给定,那么这里面的问号有多少变成左括号,多少变成右括号,是一定的. 看完以上

HDU 4811 Ball(贪心)

2014-05-15 22:02 by Jeff Li 前言 系列文章:[传送门] 马上快要期末考试了,为了学点什么.就准备这系列的博客,记录复习的成果. 正文-计数  概率 概率论研究随机事件.它源于赌徒的研究.即使是今天,概率论也常用于赌博.随机事件的结果是否只凭运气呢?高明的赌徒发现了赌博中的规律.尽管我无法预知事件的具体结果,但我可以了解每种结果出现的可能性.这是概率论的核心. "概率"到底是什么?这在数学上还有争议."频率派"认为概率是重复尝试多次,某种结

hdu 4023 - Game

题目:Alice还有Bob 轮流在已知的15中俄罗斯方块上放置瓷砖,Alice放置的是垂直的2*1的矩形: Bob放置的是水平的1*2的矩形,Alice 先开始放,最后没位置可以放者输,判断胜者. 分析:博弈,贪心.一看到以为是博弈,结果直接贪心过了. 首先,相同形状的方块压缩,一共有8中不同的方块.得到A,B优先级: (每次,取自己最优且给对手最大困扰的发难,1只能A拿,2只能B拿,所以最后再用) A:15 > 5 > 3 > 11 > 7 > 9 > 1: B:15

hdu 4869 Task(贪心)

题目链接:hdu 4869 Task 题目大意:有n台机器,m个任务,每个机器和任务都有有xi和yi,要求机器的xi,yi均大于等于任务的xi和yi才能执行任务.每台机器一天只能执行一个任务.要求完成的任务数尽量多,并且说金额尽量大.完成每个任务的金额为xi?500+yi?2 解题思路:贪心,mach[i][j]表示等级为i,时间为j的机器数量,task[i][j]表示等级为i,时间为j的机器数量.每次优先减少i,因为对应等级减少100,对应的金额代价也不会减少超过500(即时间减少1). 每次

hdu 1175 连连看(模拟循环队列)

连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18149    Accepted Submission(s): 4741 Problem Description "连连看"相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条

HDU 4864 Task(贪心)

HDU 4864 Task 题目链接 题意:有一些机器和一些任务,都有时间和等级,机器能做任务的条件为时间等级都大于等于任务,并且一个任务只能被一个机器做,现在求最大能完成任务,并且保证金钱尽量多 思路:贪心,对于每个任务,时间大的优先去匹配,时间相同的,等级大的优先去匹配,因为时间占得多,时间多1就多500,而等级最多才差200.然后匹配的时候,尽量使用等级小的去匹配,而时间只要大于它的都可以用,因为是按时间优先,所以如果该时间能匹配大的,其他肯定也能匹配,那么肯定优先匹配大的,所以只要在等级

HDU 4608 I-number--简单模拟

I-number Time Limit: 5000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 The I-number of x is defined to be an integer y, which satisfied the the conditions below: 1.  y>x; 2.  the sum of each digit of y(under base 10) is the multiple of 10; 3.  among all

[贪心+模拟] zoj 3829 Known Notation

题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5383 Known Notation Time Limit: 2 Seconds      Memory Limit: 65536 KB Do you know reverse Polish notation (RPN)? It is a known notation in the area of mathematics and computer science.

HDU 4912 LCA+贪心

Paths on the tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 531    Accepted Submission(s): 182 Problem Description bobo has a tree, whose vertices are conveniently labeled by 1,2,…,n. Th