poj 1085 Triangle War (状压+记忆化搜索)
|
Triangle War
Description
Triangle War is a two-player game played on the following triangular grid:
![]() Two players, A and B, take turns filling in any dotted line connecting two dots, with A starting first. Once a line is filled, it cannot be filled again. If the line filled by a player completes one or more triangles, she owns the completed triangles and she is awarded another turn (i.e. the opponent skips a turn). The game ends after all dotted lines are filled in, and the player with the most triangles wins the game. The difference in the number of triangles owned by the two players is not important. For example, if A fills in the line between 2 and 5 in the partial game on the left below: Input
You will be given a number of games in the input. The first line of input is a positive integer indicating the number of games to follow. Each game starts with an integer 6 <= m <= 18 indicating the number of moves that have been made in the game. The next
m lines indicate the moves made by the two players in order, each of the form i j (with i < j) indicating that the line between i and j is filled in that move. You may assume that all given moves are legal. Output
For each game, print the game number and the result on one line as shown below. If A wins, print the sentence "A wins." If B wins, print "B wins."
Sample Input 4 Sample Output Game 1: B wins. Source |
题意:
两个人玩游戏,依次在三角形上放边,假设能构成三角形。则奖励继续该此人放,问最后得到的三角形多。
思路:
给边编号,记忆化搜索即可。做过好多这样的题。就不多写思路了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#pragma comment (linker,"/STACK:102400000,102400000")
#define maxn 1005
#define MAXN 50005
#define mod 1000000009
#define INF 0x3f3f3f3f
#define pi acos(-1.0)
#define eps 1e-6
typedef long long ll;
using namespace std;
int n,m,ans,cnt,tot,flag;
bool vis[10];
int dp[300000],mp[15][15],sc[5];
int tri[9][3]=
{
0,1,2,3,4,7,2,4,5,5,6,8,9,10,15,
7,10,11,11,12,16,8,12,13,13,14,17
};
int cal(int s)
{
int i,j,t=0;
for(j=0; j<9; j++)
{
if((s&(1<<tri[j][0]))&&(s&(1<<tri[j][1]))&&(s&(1<<tri[j][2]))) t++;
}
return t;
}
int dfs(int state,int score)
{
if(dp[state]!=-1) return dp[state];
int i,j,t,tst,num,best=0,tmp;
num=9-score;
for(i=0; i<=17; i++)
{
if(state&(1<<i)) continue ;
tst=state|(1<<i);
t=cal(tst);
if(t>num)
{
tmp=t-num+dfs(tst,score-(t-num));
best=max(best,tmp);
}
else
{
tmp=score-dfs(tst,score);
best=max(best,tmp);
}
}
dp[state]=best;
return best;
}
int main()
{
int i,j,t,test=0;
mp[1][2]=0;mp[1][3]=1;mp[2][3]=2;mp[2][4]=3;mp[2][5]=4;mp[3][5]=5;
mp[3][6]=6;mp[4][5]=7;mp[5][6]=8;mp[4][7]=9;mp[4][8]=10;mp[5][8]=11;
mp[5][9]=12;mp[6][9]=13;mp[6][10]=14;mp[7][8]=15;mp[8][9]=16;mp[9][10]=17;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
tot=0;
int x,y,z,turn=0,num=0;
sc[0]=sc[1]=0;
memset(vis,0,sizeof(vis));
for(i=1; i<=n; i++)
{
scanf("%d%d",&x,&y);
z=mp[x][y];
tot|=(1<<z);
flag=0;
for(j=0; j<9; j++)
{
if(vis[j]) continue ;
if((tot&(1<<tri[j][0]))&&(tot&(1<<tri[j][1]))&&(tot&(1<<tri[j][2])))
{
vis[j]=1;
num++;
flag=1;
sc[turn]++;
}
}
if(!flag) turn^=1;
}
memset(dp,-1,sizeof(dp));
z=dfs(tot,9-num);
sc[turn]+=z;
sc[turn^1]+=(9-num-z);
if(sc[0]>sc[1]) printf("Game %d: A wins.\n",++test);
else printf("Game %d: B wins.\n",++test);
}
return 0;
}
poj 1085 Triangle War (状压+记忆化搜索)的更多相关文章
- Luogu P2831 愤怒的小鸟(状压+记忆化搜索)
P2831 愤怒的小鸟 题意 题目描述 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于\((0,0)\)处,每次Kiana可以用它向第一象限发射 ...
- poj 1085 Triangle War 博弈论+记忆化搜索
思路:总共有18条边,9个三角形. 极大极小化搜索+剪枝比较慢,所以用记忆化搜索!! 用state存放当前的加边后的状态,并判断是否构成三角形,找出最优解. 代码如下: #include<ios ...
- POJ 1191 棋盘分割 【DFS记忆化搜索经典】
题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- POJ 1579 Function Run Fun 【记忆化搜索入门】
题目传送门:http://poj.org/problem?id=1579 Function Run Fun Time Limit: 1000MS Memory Limit: 10000K Tota ...
- (中等) POJ 1054 The Troublesome Frog,记忆化搜索。
Description In Korea, the naughtiness of the cheonggaeguri, a small frog, is legendary. This is a we ...
- POJ 3249 Test for Job (记忆化搜索)
Test for Job Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 11830 Accepted: 2814 Des ...
- HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索
题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析: 枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...
- poj 1088 滑雪(区间dp+记忆化搜索)
题目链接:http://poj.org/problem?id=1088 思路分析: 1>状态定义:状态dp[i][j]表示在位置map[i][j]可以滑雪的最长区域长度: 2>状态转移方程 ...
- POJ 1088: 滑雪(经典 DP+记忆化搜索)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 74996 Accepted: 27818 Description ...
随机推荐
- Javascript-简单的倒计时跳转页面
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- 阿里云CDN上线 WAF,一站式提供分发+安全能力
CDN是业界公认的加速网站访问效率.提升用户体验的内容分发加速产品.Gartner预测2019年超过50%的互联网流量将通过CDN内容分发网络进行加速. 然而,越来越多企业也意识到恶意网络攻击对非凡用 ...
- 用js实现base64编码器
base-64作为常见的编码函数,在基本认证.摘要认证以及一些HTTP扩展中得到了大量应用.在前端领域,也常常把图片转换为base-64编码在网络中传输.本文将详细介绍base64的原理及用js实现b ...
- laravel-admin 自定义导出excel功能,并导出图片
https://www.jianshu.com/p/91975f66427d 最近用laravel-admin在做一个小项目,其中用到了excel导出功能. 但是laravel-admin自带的导出功 ...
- Linux安装Desktop 和 vncserver
sudo su - #使用 root 账户 yum grouplist #查看所有可用的group yum groupinstall GNOME Desktop #安装 GNOME 桌面 yum -y ...
- [jnhs]教训之jsp页面无法用jstl取值的坑.真他妈的奇葩,实体类的属性名不能用大写
结果页面永远都是空 调试发现,数据正常的塞进去了 问题解决: https://zhidao.baidu.com/question/570584436.html 实体类的属性名,首字母不能大写,改成小写 ...
- div style标签内嵌CSS样式
我们在DIV标签内.SPAN标签内.p标签等html标签内使用style属性直接设置div的样式. 一.在<div>标签内使用style设置css样式 - TOP 1.实例html ...
- 基于HHT和RBF神经网络的故障检测——第二篇论文读后感
故障诊断主要包括三部分: 1.故障信号检测方法(定子电流信号检测 [ 定子电流幅值和电流频谱 ] ,振动信号检测,温度信号检测,磁通检测法,绝缘检测法,噪声检测法) 2.故障信号的处理方法,即故障特征 ...
- MySQL忘记root密码重置密码(5.7版本)
网上找了一堆方法都不行,经过折腾一番,发现MySQL不同版本重置密码也存在一定的差异!记录下Mysql5.7.18版本的重置密码方法. 1.找到/etc/mysql/my.cnf 修改此文件添加一行s ...
- C#和JS交互 WebBrowser实例
本文实现了WebBrowser的简单例子 1.引用System.Windows.Froms.dll 2.引用WindowsFormsIntegration.dll 代码如下: public parti ...

