hdu 4753 Fishhead’s Little Game 博弈论+记忆化搜索
思路:状态最多有2^12,采用记忆化搜索!!
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define inf 1<<30
using namespace std;
int edge[][]={{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},
{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},
{,},{,}};
int tri[][]={{,,,},{,,,},{,,,},{,,,},{,,,},
{,,,},{,,,},{,,,},{,,,}};
int p[],index[],cnt;
int dp[<<];
int cal(int state,int e)
{
int ans=,t=;
for(int i=;i<;i++){
bool flag=;
for(int j=;j<;j++)
if(e==tri[i][j]){
flag=true;
break;
}
if(flag){
t++;
for(int j=;j<;j++){
if(!(p[tri[i][j]]&state||e==tri[i][j])){
ans--;break;
}
}
ans++;
}
if(t==) break;
}
return ans;
}
int dfs(int state,int now)
{
if(dp[now]!=-inf) return dp[now];
int ans=-inf;
for(int i=;i<cnt;i++){
if(!(now&p[i])){
int tt=cal(state,index[i]);
tt-=dfs(state|p[index[i]],now|p[i]);
ans=max(ans,tt);
}
}
return dp[now]=ans;
}
int main()
{
int t,u,v,ca=,m;
bool vis[];
p[]=;
for(int i=;i<=;i++) p[i]=p[i-]*;
scanf("%d",&t);
while(t--){
scanf("%d",&m);
int m0=,m1=,tt=,state=,side=;
memset(vis,,sizeof(vis));
while(m--){
scanf("%d%d",&u,&v);
if(u>v) swap(u,v);
for(int i=;i<;i++)
if(edge[i][]==u&&edge[i][]==v){
tt=cal(state,i);
vis[i]=;
state|=p[i];
side==?m0+=tt:m1+=tt;
side++;
side%=;
break;
}
}
cnt=;
for(int i=;i<;i++){
if(!vis[i]){
index[cnt++]=i;
}
}
for(int i=;i<(<<cnt);i++) dp[i]=-inf;
dp[(<<cnt)-]=;
int ans=m0-m1;
if(side==) ans+=dfs(state,);
else ans-=dfs(state,);
printf("Case #%d: %s\n",++ca,ans>?"Tom200":"Jerry404");
}
return ;
}
hdu 4753 Fishhead’s Little Game 博弈论+记忆化搜索的更多相关文章
- hdu 4753 2013南京赛区网络赛 记忆化搜索 ****
看到范围基本可以想到dp了,处理起来有点麻烦 #include<iostream> #include<cstdio> #include<cstring> #incl ...
- HDU 1142 A Walk Through the Forest (记忆化搜索 最短路)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- HDU 4444 Walk (离散化建图+BFS+记忆化搜索) 绝对经典
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给你一些n个矩形,给你一个起点,一个终点,要你求从起点到终点最少需要转多少个弯 题解:因为 ...
- hdu 1078 FatMouse and Cheese(简单记忆化搜索)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意:给出n*n的格子,每个各自里面有些食物,问一只老鼠每次走最多k步所能吃到的最多的食物 一道 ...
- poj 1085 Triangle War 博弈论+记忆化搜索
思路:总共有18条边,9个三角形. 极大极小化搜索+剪枝比较慢,所以用记忆化搜索!! 用state存放当前的加边后的状态,并判断是否构成三角形,找出最优解. 代码如下: #include<ios ...
- hdu 1078 FatMouse and Cheese (dfs+记忆化搜索)
pid=1078">FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...
- HDU 4597 Play Game (DP,记忆化搜索)
Play Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total S ...
- HDU 2089 不要62(数位DP·记忆化搜索)
题意 中文 最基础的数位DP 这题好像也能够直接暴力来做 令dp[i][j]表示以 j 开头的 i 位数有多少个满足条件 那么非常easy有状态转移方程 dp[i][j] = sum{ dp[ ...
- HDU 1248寒冰王座-全然背包或记忆化搜索
寒冰王座 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
随机推荐
- Android WIFI 启动流程
参考:http://blog.chinaunix.net/uid-26215986-id-3260413.html 一. WIFI 工作步骤 1. Wifi模块初始化 2. Wifi启动 3. 查找热 ...
- hdu 3172 Virtual Friends
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3172 并查集的运用... #include<algorithm> #include< ...
- mac 系统开发android,真机调试解决方案
1.确保你的android设备真正链接到电脑上了,我在这里遇到过坑,弄了好久,才发现能充电的线,确无法传递数据过去.所以不要以为随便拿一根线,能充电,就可以传递数据了,我就是这么傻傻的拿了根不能用的数 ...
- KafkaOffsetMonitor使用方法
(1)下载jar包 去网上搜索KafkaOffsetMonitor即可. 我这里共享了我的百度云连接:http://yun.baidu.com/s/1nvGjbDn 如果某一天我这个取消共享了,大家去 ...
- SCSF智能客户端学习笔记(一)
什么是智能客户端 要了解智能客户端,首先要认识瘦客户端技术和胖客户端技术各自的优缺点. 对于前者,典型的应用就是使用浏览器,通过输入URL远程访问服务端,并向服务端发送命令,获取服务端的资源,然后在客 ...
- with check option
通过有with check option选项的视图操作基表(只是面对单表,对连接多表的视图正在寻找答案),有以下结论:首先视图只操作它可以查询出来的数据,对于它查询不出的数据,即使基表有,也不可以通过 ...
- django概述
一.django的特点 1.提供一体化的web解决方案,什么叫一体化:mvc 2.等你玩儿牛逼了可以拔插组件,换成自己顺手或者更牛逼的组件
- Qt 按键长按的处理
keyPressEvent()部分代码: if (e->key() == Qt::Key_A && e->isAutoRepeat()) { if (!mPressFl ...
- 28335 AD 转换
#include "DSP2833x_Device.h"#include "DSP2833x_Examples.h" void Ad_init(void){ I ...
- P1297: [SCOI2009]迷路
首先知道,如果没有路径长度的要求,且给定的邻接矩阵只有0和1表示通与不通的话,从S->E走N次的方案数就是这个矩阵自乘N次后的(S,E)的数值.这样的话只需要快速幂+矩阵乘法即可过关. (转载请 ...