hdu6199 gems gems gems dp+博弈】的更多相关文章

/** 2017 ACM/ICPC Asia Regional Shenyang Online 解题报告 题目:hdu6199 gems gems gems 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6199 题意:Alice和Bob从左到右取数字,一开始Alice可以取1个或者2个.之后当前者可以取得数字个数为k或者k+1个. k为上一个人选的数字个数.如果当前者选不到k个或者k+1个,那么游戏结束. 两个人都用最科学的方法取数字.问Alice的…
1421 秋静叶&秋穣子   题目描述 Description 在幻想乡,秋姐妹是掌管秋天的神明,作为红叶之神的姐姐静叶和作为丰收之神的妹妹穰子.如果把红叶和果实联系在一 起,自然会想到烤红薯.烤红薯需要很多的叶子,才能把红薯烤得很香,所以秋姐妹决定比比谁能够收集到最多的红叶.静叶将红叶分成了N堆(编号1..N), 并且规定了它们的选取顺序,刚好形成一颗有向树.在游戏过程中,两人从根节点开始,轮流取走红叶,当一个人取走节点i的红叶后,另一个人只能从节点i的儿 子节点中选取一个.当取到某个叶子时游…
题目大意: 有2n个人,从0开始编号,按编号奇偶分为两队,循环轮流取一堆有m个石子的石堆,偶数队先手,每个人至少取1个,至多取w[i]个,取走最后一个石子的队伍输.问偶数队是否能赢. 分析: 题目数据不大很容易就可以联想到DP博弈,设dp[i][j]表示轮到第i个人,还有j个石子的情况下他所属队伍是否能赢. 那么如果存在一个x,使第i个人取了x个石子后第(i+1)%2n个人无论如何都败,那么他就可以赢:若不存在则输.即是: dp[i][j]=(dp[(i+1)%2n][j-1]&dp[(i+1)…
题目大意: 有g种不同颜色的小球,b个袋子,每个袋子里面有若干个每种小球 两人轮流取袋子,当袋子里面的同色小球有s个时,会合并成一个魔法球,并被此次取袋子的人获得 成功获得魔法球的人可以再次取 求二者都进行最优策略之后两人所得魔法球个数差 分析: 博弈,数据很小,自然想到了可以搜索所有状态 然后从每一步的子状态中找到对当前人(这一步的先手)最有利的状态即可 直接搜索还是会超时的,于是想到用状态压缩一下,做记忆化搜索 然后其实就是一个状压dp了 通过某个状态对于先手的最优子状态进行转移.. 代码如…
Problem B: Bachet's Game Bachet's game is probably known to all but probably not by this name. Initially there are  n  stones on the table. There are two players Stan and Ollie, who move alternately. Stan always starts. The legal moves consist in rem…
传送门 题面: In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl named "Sena" are playing a video game. The game system of this video game is quite unique: in the process of playing this game, you need to consta…
很明显带有博弈的味道.让A-B最大,由于双方都采用最佳策略,在博弈中有一个要求时,让一方的值尽量大.而且由于是序列,所以很容易想到状态dp[i][j],表示序列从i到j.结合博弈中的思想,表示初始状态i->j情况下,先手能获得的最大分数.后手能获得的就是sum[i][j]-dp[i][j].接下来枚举先手选取的是两端的哪一段即可. #include <iostream> #include <cstdio> #include <cstring> using name…
题:http://poj.org/problem?id=2068 题意: 有两个队伍A,B,每个队伍有N个人,交叉坐.即是A(1,3,5,7.....)B(2,4,6,8....).告诉你每个mi(1<=i<=2n). 现在有一堆个数为S的石堆,从第1个人开始拿石头,因为是交叉坐所以也就相当于两队轮流拿石头.注意:第i个人拿石头最少拿1个最多拿mi个,拿完石堆中最后一个石头的输.问:A队有没有必胜策略? 分析: 嗯因为数据都不是很大,我们可以用记忆化搜索来求出整个博弈图.如果后继状态有后手必胜…
http://poj.org/problem?id=2068 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ][(<<)+];//dp[i][j]表示轮到第i个人取时,剩j个石头 ]; int DFS(int pos,int remain) { ) return dp[pos][remain];//记忆化…
http://poj.org/problem?id=1678 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int INF=10e8; ],dp[]; int dfs(int x) { if(dp[x]!=-INF) return dp[x]; int ans=INF; ;i<n;i++) if(p…