CSP认证 201803-4 棋局评估(极大极小值搜索)

2024-04-18 06:48

本文主要是介绍CSP认证 201803-4 棋局评估(极大极小值搜索),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:http://118.190.20.162/view.page?gpid=T70

 

题目大意:给一个3*3棋盘,问按照最优策略下,如果1能赢输出赢后剩余未下的格子数+1,2能赢输出赢后负的剩下未下的格子数-1,平局输出0

 

题目思路:3*3很小,直接暴力所有情况,先手下尽可能想让值高,反手下尽可能想让值低,所以只用在所有可能中尽可能取利于自己的情况即可

 

以下是代码:
 

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
int mp[5][5];
int solve(int p){int num=0;rep(i,1,3){rep(j,1,3){if(!mp[i][j])num++;}}if(p==1)return num+1;else return -num-1;
}
int check(){int num1=0,num2=0,p=0;rep(i,1,3){num1=0,num2=0;rep(j,1,3){if(mp[i][j]==1)num1++;if(mp[i][j]==2)num2++;}if(num1==3){p=1;break;}if(num2==3){p=2;break;}}if(p)return solve(p);rep(j,1,3){num1=0,num2=0;rep(i,1,3){if(mp[i][j]==1)num1++;if(mp[i][j]==2)num2++;}if(num1==3){p=1;break;}if(num2==3){p=2;break;}}if(p)return solve(p);num1=0,num2=0;rep(i,1,3){if(mp[i][i]==1)num1++;if(mp[i][i]==2)num2++;}if(num1==3)return solve(1);if(num2==3)return solve(2);num1=0,num2=0;rep(i,1,3){if(mp[i][4-i]==1)num1++;if(mp[i][4-i]==2)num2++;}if(num1==3)return solve(1);if(num2==3)return solve(2);int flag=0;rep(i,1,3){rep(j,1,3){if(!mp[i][j]){flag=1;break;}}if(flag)break;}if(!flag)return 0;return 1e9;
}
int dfs(int num){int rst;if(num==1)rst=-1e9;else rst=1e9;int flag=check();if(flag!=1e9)return flag;rep(i,1,3){rep(j,1,3){if(mp[i][j]==0){mp[i][j]=num;if(num==1)rst=max(rst,dfs(2));else rst=min(rst,dfs(1));mp[i][j]=0;}}}return rst;
}
int main()
{int t;scanf("%d",&t);while(t--){rep(i,1,3){rep(j,1,3){scanf("%d",&mp[i][j]);}}int ans=dfs(1);printf("%d\n",ans);}return 0;
}

 

这篇关于CSP认证 201803-4 棋局评估(极大极小值搜索)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914051

相关文章

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu 4517 floyd+记忆化搜索

题意: 有n(100)个景点,m(1000)条路,时间限制为t(300),起点s,终点e。 访问每个景点需要时间cost_i,每个景点的访问价值为value_i。 点与点之间行走需要花费的时间为g[ i ] [ j ] 。注意点间可能有多条边。 走到一个点时可以选择访问或者不访问,并且当前点的访问价值应该严格大于前一个访问的点。 现在求,从起点出发,到达终点,在时间限制内,能得到的最大

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

hdu4277搜索

给你n个有长度的线段,问如果用上所有的线段来拼1个三角形,最多能拼出多少种不同的? import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [