【CCF】棋局评估
博弈论极小极大搜索,记忆化+状压
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=2e4+;
const int inf=;
int a[];
int three[];
int tmp[];
int ans[maxn][];
void pre(){
three[]=;
for(int i=;i<;i++){
three[i]=three[i-]*;
}
}
int judge(vector<int> tmp){
int res=;
for(int i=;i<;i++){
res+=(tmp[i]==);
}
//ALice
if(tmp[]==&&tmp[]==&&tmp[]==){
return res+;
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return res+;
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return res+;
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return res+;
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return res+;
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return res+;
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return res+;
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return res+;
}
//Bob
if(tmp[]==&&tmp[]==&&tmp[]==){
return -(res+);
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return -(res+);
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return -(res+);
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return -(res+);
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return -(res+);
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return -(res+);
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return -(res+);
}
if(tmp[]==&&tmp[]==&&tmp[]==){
return -(res+);
}
//Tie
if(res==) return ;
//None
return inf; } int dfs(int s,int p){
if(ans[s][p]!=inf) return ans[s][p];
vector<int> tmp;
for(int i=;i<;i++) tmp.push_back();
int ss=s;
int cnt=;
while(ss){
tmp[cnt]=ss%;
ss/=;
cnt++;
}
int x=judge(tmp);
if(x!=inf) return ans[s][p]=x;
if(p==){
int res=-inf;
for(int i=;i<;i++){
if(tmp[i]==){
res=max(res,dfs(s+*three[i],));
}
}
return ans[s][p]=res;
}else{
int res=inf;
for(int i=;i<;i++){
if(tmp[i]==){
res=min(res,dfs(s+*three[i],));
}
}
return ans[s][p]=res;
}
}
int main(){
int T;
scanf("%d",&T);
pre();
while(T--){
for(int i=;i<maxn;i++){
ans[i][]=ans[i][]=inf;
}
for(int i=;i<;i++) scanf("%d",&a[i]);
int s=;
for(int i=;i<;i++){
s+=a[i]*three[i];
}
int ans=dfs(s,);
printf("%d\n",ans);
}
return ;
}
【CCF】棋局评估的更多相关文章
- ccf 201803-4 棋局评估(Python实现)
一.原题 问题描述 试题编号: 201803-4 试题名称: 棋局评估 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很 ...
- ccf 201803-4 棋局评估 (对抗搜索)
棋局评估 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先.当同一种棋子占据一行.一列 ...
- CCF(棋局评估)博弈论+对抗搜索+DFS
201803-4 棋局评估 这题主要使用对抗搜索,也就是每一步寻找可以下棋的位置,通过在这一步下棋看最后会取的什么样的分数. #include<iostream> #include< ...
- CCF-CSP题解 201803-4 棋局评估
求当前井字棋局的得分. 用dfs虚构一下搜索树,每个节点对应一个不同的棋局. 每个节点有一个situation()情况评估,若胜负已定,则对应该棋局的评分:否则为0,表示胜负未定或平局. 每个节点还有 ...
- CSP201803-4棋局评估
问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先.当同一种棋子占据一行.一列或一条对角 ...
- 为何谷歌围棋AI AlphaGo可能会把李世石击溃
/* 版权声明:可以随意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 谷歌DeepMind开发的人工智能围棋程序AlphaGo以5:0的压倒性优势击败了欧洲围棋冠军.专业二 ...
- AlphaGo论文的译文,用深度神经网络和树搜索征服围棋:Mastering the game of Go with deep neural networks and tree search
转载请声明 http://blog.csdn.net/u013390476/article/details/50925347 前言: 围棋的英文是 the game of Go,标题翻译为:<用 ...
- 机器学习系列(8)_读《Nature》论文,看AlphaGo养成
作者:viewmode=contents">龙心尘 && viewmode=contents">寒小阳 时间:2016年3月. 出处:http://bl ...
- python 2048游戏控制器
2048游戏控制器 1 evaluate 要用程序来处理就得对现实的问题进行量化,用数字来表示.在2048游戏中,我们的输入是一个棋局,让我们输出一个移动方向,这样我们需要对棋局进行量化,即我们要评估 ...
随机推荐
- Date/Time Functions and Operators (Postgres)
http://www.postgresql.org/docs/9.1/static/functions-datetime.html Search Documentation: H ...
- springmvc+maven搭建web项目
1.创建一个maven project 为spring1 2.进行项目的配置:默认的java 1.5 在properties中选择project facts项目进行配置,反选web之后修改java环境 ...
- HDU 4347 The Closest M Points (kdTree)
赤果果的kdTree. 学习传送门:http://www.cnblogs.com/v-July-v/archive/2012/11/20/3125419.html 其实就是二叉树的变形 #includ ...
- Codeforces Round #290 (Div. 2) _B找矩形环的三种写法
http://codeforces.com/contest/510/status/B 题目大意 给一个n*m 找有没有相同字母连起来的矩形串 第一种并查集 瞎搞一下 第一次的时候把val开成字符串了 ...
- js 上传图片
<div class="block-input" style="height: 90px"> <span><i class=&qu ...
- 团队作业-Beta冲刺第三天
这个作业属于哪个课程 <https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1> 这个作业要求在哪里 <https ...
- 【工具篇】在.Net中实现HTML生成图片或PDF的几种方式
前段时间由于项目上的需求,要在.Net平台下实现把HTML内容生成图片或PDF文件的功能,特意在网上研究了几种方案,这里记录一下以备日后再次使用.当时想着找一种开发部署都比较清爽并且运行稳定的方案,但 ...
- scanf函数详解
函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键 ...
- shell脚本,判断给出的字符串是否相等。
第一种方法[root@localhost wyb]# .sh #!/bin/bash #判断给出的字符串是否相等 read -p "Please Input a number:" ...
- ios之UITextView
我们计划创建UITextView,实现UITextViewDelegate协议方法,使用NSLog检查该方法何时被调用.我们还会接触到如何在TextView中限制字符的数量,以及如何使用return键 ...