博弈 codevs 3196 黄金宝藏
http://codevs.cn/problem/3196/
两个人轮流取数,每次可以从数列左边或者右边取一个数,直到所有的数被取完,两个人都[size=large]以最优策略取数,求最后两人所得分数。[/size]
引用
http://www.cnblogs.com/Sakits/p/5348629.html
方法一
预处理出前缀和,然后f[i][j]表示从第i个数到第j个数先手可得到的最大得分,则有f[i][j]=sum[j]-sum[i-1]-min(f[i+1][j],f[i][j-1]);
【第i个数到第j个数的和减去min(第i+1个数到第j个数先手可得到的最大得分,第i个数到第j-1个数先手可得到的最大得分)】
var
n,i,j,x:longint;
f:array[0..500,0..500]of longint;
sum:array[0..500]of longint;
function min(a,b:longint):longint;
begin
if a<b then exit(a);
exit(b);
end;
begin
readln(n);
for i:=1 to n do
begin
read(x);
sum[i]:=sum[i-1]+x;//前缀和
f[i][i]:=x;
end;
for j:=1 to n-1 do//枚举区间长度
for i:=1 to n-j do//枚举起点
f[i][i+j]:=sum[i+j]-sum[i-1]-min(f[i+1][i+j],f[i][i+j-1]);
writeln(f[1][n],' ',sum[n]-f[1][n]);//后手为sum[n]-f[1][n]
end.
方法二
极大极小搜索
dfs(l,r)表示已在左边取了l个数,已在右边取了r个数,在剩下的数里取,最多比对手多多少分,则有dfs(l,r):=max(a[l+1]-dfs(l+1,r),a[n-r]-dfs(l,r+1));由于双方都用最优策略,所以最多比对手多多少分=max(取左边的数-对手接下来最多比你多多少分,取右边的数-对手接下来最多比你多多少分);则先手分数为(总分+先手最多比后手多多少分)div 2,而后手得分则为(总分-先手最多比后手多多少分)div 2。
var n,i,j,res,sum:longint;
a:array[0..1000] of longint;
f:array[0..600,0..600] of longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
function dfs(l,r:longint):longint;
begin
if f[l,r]<>maxlongint then exit(f[l,r]);
if l+r=n then begin
f[l,r]:=0;
exit(0);
end;
f[l,r]:=max(a[l+1]-dfs(l+1,r),a[n-r]-dfs(l,r+1));
exit(f[l,r]);
end;
begin
readln(n);
sum:=0;
for i:=1 to n do begin
read(a[i]);
inc(sum,a[i]);
end;
for i:=0 to n do
for j:=0 to n-i do
f[i,j]:=maxlongint;
res:=dfs(0,0);
writeln((sum+f[0,0]) div 2,' ',(sum-f[0,0]) div 2);
end.
分享到:
相关推荐
毕业设计基于Python+PyQt5实现多智能体博弈AI五子棋游戏(包含人机博弈+深搜+α-β剪枝)源代码+文档说明,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用...
博弈论基础知识点 在计算机科学和经济学中,博弈论是一个非常重要的领域,它研究的是在多个参与者之间的策略性互动,目的是要找到最优的策略以达到自己的目标。在这篇文章中,我们将讨论基本博弈论,包括巴什博弈、...
Python+PyQt5实现五子棋游戏(人机博弈+深搜+α-β剪枝) 该项目使用Pycharm 2021.2.3 + Python3.8编写 该五子棋游戏棋盘大小n = 15*15=255,假设搜索深度为d,使用深度优先搜索进行推演的时间复杂度为 $$ O(n^d)...
博弈论,作为一门结合数学与经济学的学科,是研究决策者之间互动行为的理论,尤其在系统工程领域中有着广泛的应用。系统工程是综合考虑系统的各个要素,通过优化设计和管理来实现整体性能最优化的科学。在这个"博弈...
演化博弈是一种将生物学、经济学和社会科学中的竞争与合作现象模型化的数学工具,它结合了博弈论和演化理论。在MATLAB环境下,我们可以利用其强大的数值计算和图形化能力来实现演化博弈的仿真。本资源主要提供了如何...
基于MADDPG的多智能体博弈对抗算法python源码+详细注释.zip 基于MADDPG的多智能体博弈对抗算法python源码+详细注释.zip 基于MADDPG的多智能体博弈对抗算法python源码+详细注释.zip 基于MADDPG的多智能体博弈对抗算法...
在本资源中,我们主要探讨的是使用MATLAB进行演化博弈的模拟和图形绘制。MATLAB是一种强大的数值计算和数据可视化工具,它在科学研究和工程领域中广泛应用。在博弈论中,演化博弈理论是一个重要的分支,它研究在动态...
演化博弈论是应用数学和生物学理论来研究社会、经济、生物系统中决策者之间互动行为的一种方法。在MATLAB环境中,我们可以利用其强大的计算和图形化能力,对演化博弈进行编程和模拟,以便深入理解博弈过程和结果。本...
博弈论(Game Theory) 第一章 引论 第二章 基本概念 第三章 完全信息静态博弈 第四章 完全信息动态博弈 第五章 不完全信息静态博弈 第六章 不完全信息动态博弈 第七章 合作博弈 第八章 演化博弈
【标题】"acm杭电入门课件+博弈论文+背包九讲"涵盖了多个与算法竞赛、计算机科学基础以及优化问题解决相关的知识点。ACM,全称是国际大学生程序设计竞赛(International Collegiate Programming Contest),是一项...
随机演化博弈是博弈论中的一个重要概念,它结合了随机性和演化思想来研究个体在互动过程中的策略选择。在这个"sujiyanhua.zip"压缩包中,包含的代码和文档为理解这一理论提供了一个实践的平台。以下是关于随机演化...
如果一个完美信息的动态博弈中,各博弈方的策略构成的一个策略组合满足:在整个动态博弈及它的所有子博弈中都构成纳什均衡,那么这个策略组合称为该动态博弈的一个“子博弈完美纳什均衡”。 在有限完美信息博弈中,...
本文主要围绕"博弈分配"、"博弈频谱"、"博弈论认知无线电仿真"、"认知频谱"以及"博弈功率分配"这些关键词,探讨在认知无线电网络中的频谱管理和功率控制策略。 首先,"博弈分配"是指将有限的频谱资源通过博弈论的...
**演化博弈Matlab工具箱详解** 演化博弈理论是生物学、经济学和社会科学等领域中研究系统动态演化的重要工具。它结合了博弈论与进化理论,通过模拟个体间的策略互动和自然选择过程,来研究群体行为和系统稳定性。在...
演化博弈是一种应用数学模型,常用于社会科学、生物学和经济学等领域,用以研究群体行为和策略互动。在MATLAB中实现演化博弈,可以直观地通过图形展示动态过程,并分析不同参数如何影响策略选择。本篇文章将深入探讨...
基于matlab的主从博弈 下层KKT条件 强对偶处理双线性源码+详细注释.zip基于matlab的主从博弈 下层KKT条件 强对偶处理双线性源码+详细注释.zip基于matlab的主从博弈 下层KKT条件 强对偶处理双线性源码+详细注释.zip...
博弈论是一种应用数学工具,主要用于分析在竞争与合作并存的多主体决策场景。它源自经济学,但已广泛应用于通信、计算机科学、生物学、军事策略等多个领域。在本主题“基于博弈论的功率控制算法”中,我们主要探讨的...
博弈论是经济学、数学、计算机科学等领域的一种重要理论,它研究在有冲突和合作的决策者之间如何进行策略选择。MATLAB作为一种强大的数值计算和数据分析工具,被广泛用于博弈论的建模和模拟。本资源提供了博弈论及其...