hdu4753 Fishhead’s Little Game 状态压缩,总和一定的博弈
此题和UVA 10891 Game of Sum 总和一定的博弈,区间dp是一个道理,就是预处理麻烦
这是南京网络赛的一题,一直没做,今天做了,虽然时间有点长,但是1ac,这几乎是南京现场赛的最后一道正式题了
typedef long long LL;
const int INF = 1000000007;
const double eps = 1e-10;
const int MAXN = 1000010;
int into[20][20];
int s[12];
vector<int>p[25];
bool vis[1 << 24];
short dp[1 << 24];
/**
0 1 2
3 4 5
6 7 8
9 10 11 12 13 14 15
16 17 18 19
20 21 22 23
*/
short dpf(int ss, int last)
{
if (!last) return 0;
if (vis[ss]) return dp[ss];
vis[ss] = true;
short &ans = dp[ss];
ans = 0;
short tmp = 0;
short tmplast = last;
int nextss; REP(i, 24)
{
if ( (ss & (1 << i)) == 0)
{
nextss = ss | (1 << i);
tmp = 0;
tmplast = last;
REP(j, p[i].size())
{
if ( (nextss & s[p[i][j]]) == s[p[i][j]] )
tmp++, tmplast--;
}
tmp += tmplast - dpf(nextss, tmplast);
ans = max(ans, tmp);
}
}
return ans;
} void init()
{
///点到边的映射
FE(i, 1, 16)
if (i % 4) into[i][i + 1] = into[i + 1][i] = i - (i / 4) - 1;
FE(i, 1, 12)
into[i][i + 4] = into[i + 4][i] = 12 + i - 1; ///边到小正方形的映射,以及小正方形到边的映射
CLR(s, 0);
REP(i, 25) p[i].clear();
REP(i, 9)
{
s[i] |= (1 << i);
p[i].push_back(i);
s[i] |= (1 << (i + 3));
p[i + 3].push_back(i); s[i] |= (1 << (12 + (i / 3) * 4 + i % 3));
p[12 + (i / 3) * 4 + i % 3].push_back(i);
s[i] |= (1 << (13 + (i / 3) * 4 + i % 3));
p[13 + (i / 3) * 4 + i % 3].push_back(i);
}
}
int win[2];
int n, m;
int S; int main ()
{
int x, y, z;
int T;
int nc = 1;
init();
RI(T);
while (T--)
{
CLR(win, 0);
RI(m);
S = 0;
REP(i, m)
{
RII(x, y);
z = into[x][y];
S |= (1 << z);
REP(j, p[z].size())
{
if ((S & s[p[z][j]]) == s[p[z][j]])
win[i % 2]++;
}
}
printf("Case #%d: ", nc++);
int last = 9 - (win[0] + win[1]);
if (!last)
{
puts(win[0] > 4 ? "Tom200" : "Jerry404");
}
else
{
CLR(vis, 0);
win[m % 2] += dpf(S, last);
if (m % 2 == 0) puts(win[m % 2] > 4 ? "Tom200" : "Jerry404");
else puts(win[m % 2] > 4 ? "Jerry404" : "Tom200");
}
}
return 0;
}
hdu4753 Fishhead’s Little Game 状态压缩,总和一定的博弈的更多相关文章
- hdu 5724 SG+状态压缩
Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- POJ 3311 【状态压缩DP】
题意: 给n个点,给出矩阵代表i到j单向边的距离. 要求,不介意访问每个点的次数,要求访问完每个点,使得路程总和最小. 思路: 由于不介意访问每个点的次数,所以可以先进行FLOYD求出任意两个点之间的 ...
- BZOJ1688|二进制枚举子集| 状态压缩DP
Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...
- [转]状态压缩dp(状压dp)
状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...
- POJ 2441 Arrange the Bulls 状态压缩递推简单题 (状态压缩DP)
推荐网址,下面是别人的解题报告: http://www.cnblogs.com/chasetheexcellence/archive/2012/04/16/poj2441.html 里面有状态压缩论文 ...
- poj 3254(状态压缩DP)
poj 3254(状态压缩DP) 题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相 ...
- BZOJ 3813--奇数国(线段树&欧拉函数&乘法逆元&状态压缩)
3813: 奇数国 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 755 Solved: 432[Submit][Status][Discuss] ...
- hdu4336 Card Collector(概率DP,状态压缩)
In your childhood, do you crazy for collecting the beautiful cards in the snacks? They said that, fo ...
- 旅行商问题——状态压缩DP
问题简介 有n个城市,每个城市间均有道路,一个推销员要从某个城市出发,到其余的n-1个城市一次且仅且一次,然后回到再回到出发点.问销售员应如何经过这些城市是他所走的路线最短? 用图论的语言描述就是:给 ...
随机推荐
- java中远程http文件上传及file2multipartfile
工作中有时会遇到各种需求,你得变着法儿去解决,当然重要的是在什么场景中去完成. 比如Strut2中file类型如何转换成multipartfile类型,找了几天,发现一个变通的方法记录如下(虽然最后没 ...
- Android中加载事件的方式
Android中加载事件的方式 通过内部类的方式实现 通过外部类的方式实现 通过属性的方式实现 通过自身实现接口的方式实现 通过内部类的方式实现 Demo btn_Login.setOnClickLi ...
- python集合相关操作
集合相关操作 集合是一个无序的,不重复的数据组合,它有着两个主要作用:去重以及关系测试. 去重指的是当把一个列表变成了集合,其中重复的内容就自动的被去掉了 关系测试指的是,测试两组数据之间的交集.差集 ...
- php7 & lua 压测对比
内存:32G CPU:2个6核 接口数据deflate 压缩后 均不到10k, ==== php7 ==== Concurrency Level: 100 Time taken for tests: ...
- android 项目上传SVN不需要上传的文件
bin,gen 不用提交 因为这两个文件夹是自动生成的.如果提交可能会产生编译异常..settings也是自动生成,也不用提交.
- poj 3660 传递闭包 **
题意:题目给出了m对的相对关系,求有多少个排名是确定的. 链接:点我 如果这个点到其他点的关系是确定的,那么这个点就是确定的,注意如果这个点到不了其他点,但其他点能到这个点,那么这个点和其他点的关系是 ...
- CentOS 7 yum 安装subversion
yum list installed | grep subversionyum install subversioncd /var/wwwsvn -hsvn co svn://121.196.226. ...
- 有强大的cURL,忘掉httpclient的吧!
这段时间想做一个网页采集的程序,由于一网站采用了防采集的办法,我的httpclient总是在登录后无法获取到我想要过去的链接.在无数次的跟踪过后发现原来人家给返回的是javascript拼成的页面,而 ...
- hdu5094 Maze
--就是爬管道-- 还好内存给的多-- 不然就不会做了-- #include<iostream> #include<map> #include<string> #i ...
- Linux进程管理工具 Supervisord 的安装 及 入门教程
Supervisor是一个进程管理工具,官方的说法: 用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了 ...