HDU 5005(Compromise-双人目标为最大化不同值的博弈)
Compromise
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 155 Accepted Submission(s): 47
studies his interaction with AMB from a game theoretical perspective. He views his everyday life with AMB as a game.
The game has N "nodes" corresponding to different "states" of life. Each node has several outgoing "edges" representing "actions". A node either belongs to Xiaoqiang or AMB. The nodes and edges form a connected DAG (Directed Acyclic Graph, a graph without cycles).
Each node without outgoing edges has two "utility" values for Xiaoqiang and AMB respectively.
For example, consider the following game:
● Node S: The day begins. AMB has two actions leading to A and B respectively.
● Node A: AMB goes to University P. Xiaoqiang has two actions leading to C and D respectively.
● Node B: AMB goes to University T. Xiaoqiang has two actions leading to D and E respectively.
● Node C: Xiaoqiang and AMB both go to University P. AMB's utility is 102, Xiaoqiang's utility is 99.
● Node D: Xiaoqiang and AMB go to different universities. AMB's utility is 51, Xiaoqiang's utility is 0.
● Node E: Xiaoqiang and AMB both go to University T. AMB's utility is 100, Xiaoqiang's utility is 101.
Life starts from Node S. At each node, either Xiaoqiang or AMB can take an action. Xiaoqiang's aim is to maximize his own utility (and cares nothing about AMB) and AMB's aim is also to maximize his own utility.
AMB thinks, if he goes to node A then Xiaoqiang's best response will be going to node C and he can happily live in University P with Xiaoqiang. In this case AMB's utility is 102 and Xiaoqiang's is 99. Xiaoqiang is not satisfied with this, but it seems there
is nothing Xiaoqiang can do about this. This is the so called Nash Equilibrium.
Until one day Xiaoqiang claims (or, to be exact, swears): "Listen, I was attacked by a paramecium and I became insane. If I am in Node B, I will surely go to Node E. But if I am in Node A, I will go to Node D without hesitation." In this way, he reveals his
whole strategy to AMB, which encodes for each node what Xiaoqiang will do if he arrives at the node. Notice that in this strategy Xiaoqiang's action (going to University T) at a node does not depend on which path is used to arrive at the node. This strategy
is not rational, because at Node A Xiaoqiang's best action should be going to Node C.
But Xiaoqiang makes his claim in such a convincing voice that AMB believes that Xiaoqiang will follow this strategy at all cost however irrational it is. Then AMB finds out that his best strategy will be going to node B, and they will end up at Node E. In this
case, Xiaoqiang's utility is 101. Notice that Xiaoqiang must keep his words after the claim. That is, after the claim Xiaoqiang's strategy is fixed, and AMB will make decisions to maximize his own utility provided Xiaoqiang's strategy.
Given a game, you are to determine:
(1) Xiaoqiang's best utility if he cannot make the claim.
(2) Xiaoqiagn's best utility if he can make the claim.
To make things simple, all utility values are distinct.
Remark: The real world situation is, Xiaoqiang and AMB are currently in Node D because AMB failed to get himself to University T through the entrance exam.
Each test case begins with one integer N, the number of nodes. 1<=N<=200. Life starts from the first node.
Then follows N lines. Each line begins with an integer M indicating the number of actions. 0<=M<N
If M is nonzero, M integers follow. Each integer (in range [1, N]) represents the destination of an outgoing edge. At the end of the line is a character being either 'A' or 'X' describing whether this node belongs to AMB or Xiaoqiang.
If M is zero, two integers follow representing AMB's utility and Xiaoqiang's utility respectively. Utility values are in range [0, 10000] and are distinct.
1
6
2 5 6 A
0 102 99
0 50 0
0 100 101
2 2 3 X
2 3 4 X
99 101
pid=5060" target="_blank">5060
5059 5058 5057解法:
第一问:直接从后向前Dp
第二问:
因为2人目标不同。我们仅仅考虑某个节点V是否能走到。
退一步,考虑calm X是否能让A走到V或比V更糟的节点。
假设办不到。A一定能去比V更优的节点。V走不到
否则,考虑是否能在该策略走到V. //有可能仅仅存在到比V更糟的路径
定义一个节点avi,当且仅当该节点能让A走到V或比V更糟的节点。
那么若存在一条1->V的路径皆为avi就可以
此时X会向V决策,A因为不能去比V更优的节点,也向V决策
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (200+10)
#define MAXM (200*200+10)
long long mul(long long a,long long b){return (a*b)%F;}
long long add(long long a,long long b){return (a+b)%F;}
long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;}
typedef long long ll;
int T,n;
int edge[MAXM],next[MAXM],pre[MAXN],size=0;
void addedge(int u,int v)
{
edge[++size]=v;
next[size]=pre[u];
pre[u]=size;
}
int dp[MAXN][2],who[MAXN];
void max(int &max1,int &max2,int max3)
{
if (max3>=max1) max2=max1,max1=max3;
else if (max3>=max2) max2=max3;
}
bool b[MAXN]; void dfs1(int i)
{
if (who[i]==2||b[i]) return;
b[i]=1;
Forp(i)
{
int v=edge[p];
dfs1(v);
if (dp[i][0]<0||(dp[i][who[i]]<dp[v][who[i]])) memcpy(dp[i],dp[v],sizeof(int)*2);
}
}
bool avi[MAXN];
void dfs_avi(int i,int value)
{
if (b[i]) return;
b[i]=1;
if (who[i]==2)
{
avi[i]=(bool)(dp[i][0]<=value);
return;
} avi[i]=!who[i];
Forp(i)
{
int v=edge[p];
dfs_avi(v,value);
if (!who[i]) avi[i]&=avi[v];
else avi[i]|=avi[v];
}
}
bool dfs_path(int i,int value)
{
if (b[i]) return 0;
b[i]=1;
if (who[i]==2)
{
return (dp[i][0]==value);
}
Forp(i)
{
int v=edge[p];
if (avi[v]) if (dfs_path(v,value)) return 1; } return 0; } int main()
{
// freopen("hdu5005.in","r",stdin);
// freopen(".out","w",stdout);
cin>>T;
while(T--)
{
MEM(pre) size=0;
MEMi(dp) MEM(who)
cin>>n;
For(i,n)
{
int m;
scanf("%d",&m);
if (m)
{
For(j,m) {int v;scanf("%d",&v);addedge(i,v);}
char s[2];
scanf("%s",s); if (s[0]=='A') who[i]=0;else who[i]=1;
}
else
{
who[i]=2;
scanf("%d%d",&dp[i][0],&dp[i][1]);
}
}
MEM(b) dfs1(1); int ans2=-1;
For(i,n) if(who[i]==2)
{
if (ans2<dp[i][1])
{
MEM(avi) MEM(b)
dfs_avi(1,dp[i][0]);
if (avi[1])
{
MEM(b)
if (dfs_path(1,dp[i][0])) ans2=dp[i][1];
}
}
} printf("%d %d\n",dp[1][1],ans2); } return 0;
}
HDU 5005(Compromise-双人目标为最大化不同值的博弈)的更多相关文章
- geotrellis使用(二十二)实时获取点状目标对应的栅格数据值
目录 前言 实现方法 总结 一.前言 其实这个功能之前已经实现,今天将其采用1.0版的方式进行了重构与完善,现将该内容进行总结. 其实这个功能很常见,比如google地球上 ...
- HDU.2516 取石子游戏 (博弈论 斐波那契博弈)
HDU.2516 取石子游戏 (博弈论 斐波那契博弈) 题意分析 简单的斐波那契博弈 博弈论快速入门 代码总览 #include <bits/stdc++.h> #define nmax ...
- HDU 1242 dFS 找目标最短路
//多个起点,要最短得目标,不妨倒过来从目标出发,去找最近的点更新!!!!!!递归时思路要清楚 #include<iostream> #include<cstring> usi ...
- 目标跟踪之meanshift---均值漂移搞起2000过时的
基于灰度均值分布的目标跟踪! http://blog.csdn.net/wds555/article/details/24499599 但他有些有点: 1.不会受遮挡太多影响 Mean Shift跟踪 ...
- HDU 1863:畅通project(带权值的并查集)
畅通project Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 1847 Good Luck in CET-4 Everybody!(巴什博弈)
Good Luck in CET-4 Everybody! HDU - 1847 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Ci ...
- HDU 5289 Assignment (ST算法区间最值+二分)
题目链接:pid=5289">http://acm.hdu.edu.cn/showproblem.php?pid=5289 题面: Assignment Time Limit: 400 ...
- HDU 1848 Fibonacci again and again (斐波那契博弈SG函数)
Fibonacci again and again Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & ...
- HDU 2516 取石子游戏(斐波那契博弈)
取石子游戏 Time Limit: 2000/1000 MS(Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
随机推荐
- HDU 5293 Annoying problem 树形dp dfs序 树状数组 lca
Annoying problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 Description Coco has a tree, w ...
- ASIHTTPRequest的环境配置和使用示例
ASIHTTPRequest类库是基于ISO SDK的一组网络请求的API.IOS SDK的网络组件CFNetwork API操作起来非常复杂.而ASIHTTPRequest类库是对CFNetwork ...
- Buck converter uses low-side PWM IC
The most common switching-power topology is a buck converter, which efficiently transforms high volt ...
- How to implement *All-Digital* analog-to-digital converters in FPGAs and ASICs
When we engineers look at the complexity of system design these days, we are challenged with crammin ...
- SQL Server性能调优:资源管理之内存管理篇(上)
http://www.cnblogs.com/caspnet/archive/2011/02/21/1959539.html 对SQL Server来说,最重要的资源是内存.Disk和CPU,其中内存 ...
- java内存泄露补充样例
前几天写了个内存泄露的文章.里面介绍了内存泄露的相关知识:http://blog.csdn.net/u010590685/article/details/46973735 但是里面给的样例不是非常好, ...
- JavaScript面试(-------------------------------------------)
this是什么 方法调用模式 构造器调用模式 函数调用模式 apply/call模式 this是什么 —大多语言中,’this’代表由类实例化的当前对象.在JavaScript中,’this’通常表示 ...
- .net程序保护方式大观
.net软件保护方式大观 最近调试一个运行于.net 2.0下的软件,发现该软件使用的保护方式很具有代表性,基本囊括了现在.net下的所有保护措施.实践证明,这些保护措施就像全真七子,单打独斗功力差了 ...
- 【spring cloud】子模块module -->导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做/或者 每次导入一个新的spring boot项目,IDEA不识别子module,启动类无法启动/右下角没有蓝色图标
如题:导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做 或者说每次导入一个新的spring boot项目,IDEA不识别,启动类无法启动,怎么解决 下面分别 ...
- MySQL数据库的概念
学习数据库的一些知识.写写博客方便梳理以及巩固知识. 关于什么是数据库就举一个样例来说明,说的可能不够准确,仅仅要明确一个大概的意思就够了.深刻的学习还是要去看书的. 讲讲生活中有关数据的样例:在一个 ...