博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[CodeVs3196]黄金宝藏(DP/极大极小搜索)
阅读量:5170 次
发布时间:2019-06-13

本文共 1686 字,大约阅读时间需要 5 分钟。

      题目大意:给出n(≤500)个数,两个人轮流取数,每次可以从数列左边或者右边取一个数,直到所有的数被取完,两个人都以最优策略取数,求最后两人所得分数。

      显然这种类型的博弈题,第一眼就是极大极小搜索+记忆化,但是我并不是很会极大极小搜索TAT。然后第二眼发现可以用DP写,而且显然比极大极小搜索好写啊。这一类的题有一个最普遍的做法,预处理出前缀和,然后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个数先手可得到的最大得分)】

      要注意一点,由于$$f[i][j]$$需要用到$$f[i+1][j]和f[i][j-1]$$,所以我们需要枚举的是i到j这个区间的长度,先把区间长度小的计算出来,才能计算区间长度大的,一开始就被这个坑了,果然我还是太弱了= =。。。

代码如下:

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
View Code

      其实还可以省一维。

代码如下:

var  n,i,j,x:longint;  f:array[0..5001]of longint;  sum:array[0..5001]of longint;function min(a,b:longint):longint;begin  if a
View Code

      当然,我不会极大极小搜索是因为我是蒟蒻啊。。。这道题HR神犇用的就是极大极小搜索,真是太神了%%%。

      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.
View Code

 

转载于:https://www.cnblogs.com/Sakits/p/5348629.html

你可能感兴趣的文章
静态库制作-混编(工程是oc为基础)
查看>>
jQuery 显示加载更多
查看>>
Confluence 6 系统运行信息中的 JVM 内存使用情况
查看>>
Confluence 6 升级以后
查看>>
用JS实现版面拖拽效果
查看>>
二丶CSS
查看>>
《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
查看>>
JS一些概念知识及参考链接
查看>>
TCP/IP协议原理与应用笔记24:网际协议(IP)之 IP协议的简介
查看>>
SAP HANA开发中常见问题- 基于SAP HANA平台的多团队产品研发
查看>>
游戏中的心理学(一):认知失调有前提条件
查看>>
WHAT I READ FOR DEEP-LEARNING
查看>>
【Ruby】Ruby在Windows上的安装
查看>>
Objective C 总结(十一):KVC
查看>>
BZOJ 3747 洛谷 3582 [POI2015]Kinoman
查看>>
vue实战(7):完整开发登录页面(一)
查看>>
Visual Studio自定义模板(二)
查看>>
【Mood-20】滴滤咖啡做法 IT工程师加班必备 更健康的coffee 项目经理加班密鉴
查看>>
读《构建之法-软件工程》第四章有感
查看>>
使用 Printf via SWO/SWV 输出调试信息
查看>>