网赛的一道题目,当时没做出来。

由题意可知,最多只有12条边未知。

所以最多只有(1<<12)种状态。

所以记忆化搜索这种状态下,枚举添加任意一条边之后的状态的最优值。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
using namespace std;
int dp[10001];
int visit[10001];
int vis[25];
int oth[25];
int ts;
int num(int vist[])
{
int i;
int sum=0;
for(i=1;i<=9;i++)
{
if(vist[i]&&vist[i+3]&&vist[i+12+(i-1)/3]&&vist[i+13+(i-1)/3])sum++;
}
return sum;
}
int dos(int x)
{
int sum=0,i;
int vist[26];
for(i=0;i<=24;i++)vist[i]=0;
for(i=1;i<=ts;i++)
{
if(x&(1<<(i-1)))
{
vist[oth[i-1]]=1;
}
}
for(i=1;i<=24;i++)
{
if(vis[i])vist[i]=1;
}
sum=num(vist);
return sum;
}
int dfs(int x)
{
if(visit[x]!=-1)return visit[x];
int ans=0;
for(int i=1;i<=ts;i++)
{
if(!(x&(1<<(i-1))))
{
int y;
y=x+(1<<(i-1));
int ss;
ss=dfs(y);
ans=max(9-dp[x]-ss,ans);
}
}
visit[x]=ans;
return ans;
}
int main()
{
int T,i,n,a,b;
int cas;
int anum,bnum,s;
cas=0;
scanf("%d",&T);
while(T--)
{
cas++;
anum=bnum=0;
s=0;
scanf("%d",&n);
memset(vis,0,sizeof(vis));
memset(visit,-1,sizeof(visit));
for(i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
if(a>b)swap(a,b);
if(b-a==4)ts=12+a;
else ts=a-a/4;
vis[ts]=1;
if(i%2==0)
{
anum+=num(vis)-s;
}
else bnum+=num(vis)-s;
s=num(vis);
}
ts=0;
for(i=1;i<=24;i++)if(vis[i]==0)oth[ts++]=i;
for(i=0;i<(1<<ts);i++)dp[i]=dos(i);
int have;
have=9-s;
int fs;
fs=dfs(0);
//printf("%d %d %d %d\n",anum,bnum,have,fs);
printf("Case #%d: ",cas);
if(n%2==0)
{
if(anum+fs>bnum+have-fs)cout<<"Tom200"<<endl;
else cout<<"Jerry404"<<endl;
}
else
{
if(anum+have-fs>bnum+fs)cout<<"Tom200"<<endl;
else cout<<"Jerry404"<<endl;
}
}
return 0;
}

hdu-4753-Fishhead’s Little Game-记忆化搜索的更多相关文章

  1. HDU 4960 Another OCD Patient(记忆化搜索)

    HDU 4960 Another OCD Patient pid=4960" target="_blank" style="">题目链接 记忆化 ...

  2. 随手练——HDU 1078 FatMouse and Cheese(记忆化搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意: 一张n*n的格子表格,每个格子里有个数,每次能够水平或竖直走k个格子,允许上下左右走,每次走的格子 ...

  3. HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)

    题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...

  4. HDU 4628 Pieces(状态压缩+记忆化搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=4628 题意:给个字符窜,每步都可以删除一个字符窜,问最少用多少步可以删除一个字符窜分析:状态压缩+记忆化搜索  ...

  5. HDU 4597 Play Game (DP,记忆化搜索,博弈)

    题意:Alice和Bob玩一个游戏,有两个长度为N的正整数数字序列,每次他们两个,只能从其中一个序列,选择两端中的一个拿走.他们都希望可以拿到尽量大的数字之和, 并且他们都足够聪明,每次都选择最优策略 ...

  6. HDU 1331 Function Run Fun(记忆化搜索)

    Problem Description We all love recursion! Don't we? Consider a three-parameter recursive function w ...

  7. HDU - 5001 Walk(概率dp+记忆化搜索)

    Walk I used to think I could be anything, but now I know that I couldn't do anything. So I started t ...

  8. HDU 3652 B-number(数位dp&amp;记忆化搜索)

    题目链接:[kuangbin带你飞]专题十五 数位DP G - B-number 题意 求1-n的范围里含有13且能被13整除的数字的个数. 思路 首先,了解这样一个式子:a%m == ((b%m)* ...

  9. HDU - 6143 Killer Names(dp记忆化搜索+组合数)

    题意:从m种字母中选取字母组成姓名,要求姓和名中不能有相同的字母,姓和名的长度都为n,问能组成几种不同的姓名. 分析: 1.从m种字母中选取i种组成姓,剩下m-i种组成名. 2.i种字母组成长度为n的 ...

  10. HDU 1078 FatMouse and Cheese(记忆化搜索)

    FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

随机推荐

  1. DelegatingFilterProxy

    安全过滤器链 Spring Security的web架构是完全基于标准的servlet过滤器的. 它没有在内部使用servlet或任何其他基于servlet的框架(比如spring mvc), 所以它 ...

  2. 【Android】跟着教程做の学习笔记

    教程 + <第一行代码 - Android> //尽量在十二月底学完吧(同步学习java基础)

  3. 【基础数学】质数,约数,分解质因数,GCD,LCM

    1.质数: 质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能整除以其他自然数(质数),换句话说就是该数除了1和它本身以外不再有其他的因数. 2.约数: 如 ...

  4. python 字典items和iteritems

    3.4.6 items和iteritems 说明:items以列表方式返回字典中的键值对,iteritems以迭代器对象 返回键值对儿(Python3中不再支持): 例子: 1: >>&g ...

  5. 挺好看的CSS

    <?php header("content-type:text/html;charset=utf-8"); echo "<style>h1{ color ...

  6. SWFUpload接受服务器Action返回的参数

    首先我们要了解这个函数 function uploadSuccess(file, serverData) { try { var progress = new FileProgress(file, t ...

  7. nslookup返回信息说明

    先看一个示例:   如上图,我们把输出结果分成三部分,下面分别来描述:   第一部分: 这里是我们本机的DNS服务器信息. 客户机先到主DNS Server进行连接查询,结果发现异常,连接失败,于是出 ...

  8. php时间函数

    PHP中的时间函数有这么些:(1)date用法: date(格式,[时间]);如果没有时间参数,则使用当前时间. 格式是一个字符串,其中以下字符有特殊意义:U 替换成从一个起始时间(好象是1970年1 ...

  9. CentOS下安装R

    R的Windows版本有直接的安装包,直接下载安装很方便,但是对于CentOS6以上,不能直接通过yum 安装R,需要自己编译. 1. 在编译之前,用yum安装各种软件 (1)安装gcc > y ...

  10. 为什么要Cssreset

    1.CssReset是什么?由于html标签在各浏览器的默认样式解析出来的有所不同.例如<ul>标签在IE.firefox.chrome浏览器下默认边距是不一样的.各浏览器的默认样,会给我 ...