【codevs】3196 黄金宝藏
2024-09-25 19:24:52
【算法】区间DP+博弈论
【题解】其实它都不是博弈题……
很自然的可以设f[i][j]表示i~j先手可取得的最大价值。
容易得到转移式:f[i][j]=max(a[i]+sum[i+1~j]-f[i+1][j],a[j]+sum[i~j-1]-f[i][j-1])。
化简得到f[i][j]=sum[i~j]-min(f[i+1][j],f[i][j-1])。
然后预处理前缀和,按区间从小到大做即可。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
int a[maxn],f[maxn][maxn],sum[maxn],n;
int main()
{
scanf("%d",&n);
sum[]=;
for(int i=;i<=n;i++){scanf("%d",&a[i]);sum[i]=sum[i-]+a[i];}
for(int p=;p<n;p++)
for(int i=;i<=n-p;i++)
f[i][i+p]=sum[i+p]-sum[i-]-min(f[i+][i+p],f[i][i+p-]);
printf("%d %d",f[][n],sum[n]-f[][n]);
return ;
}
因为按区间大小递推所以还可以缩一维空间。
极大极小搜索是什么,可以吃吗?
最新文章
- wex5 教程 之 图文讲解 登陆,注册,页面跳转
- 关于 BCSCTL1 = CALBC1_12MHZ;DCOCTL = CALDCO_12MHZ; 的疑问
- WCF netTcp配置
- CreateJS第0章- Canvas基础
- [LeetCode] 147. Insertion Sort List 解题思路
- cocos2dx新建工程分析
- sql数据导出导入格式化
- WordPress-基础设置之常规设置
- [转]python变量作用域的有趣差别
- 单点登录实现机制:桌面sso
- Java最最常用的100个类排序(非官方)
- jQuery第七章插件的编写和使用
- MSSQL 临时表和公用表使用案例
- Redis-Sentinel Redis的哨兵模式
- 再谈git和github-深入理解-2
- 使用 vmstat, mpstat 和 sar 查看系统运行参数
- __stdio_common_vsnprintf_s,该符号在函数 _vsnprintf_s_l 中被引用
- perl 读取一个文件 替换文件的关键词 把数据替换到新的文件
- 打印页面时a标签不显示URL的方法
- dedecms列表页调用文章正文内容的方法