BZOJ 2091: [Poi2010]The Minima Game 博弈dp
2024-10-18 08:52:27
十分有趣的问题.
我们发现如果拿的话肯定要先拿一些大的.
所以我们可以先将所有数从小到大排序,令 $f[i]$ 表示拿完前 $i$ 小先手-后手的最大值.
则有转移:$f[i]=max(f[i-1],a[i]-f[i-1])$
反复阅读:每次拿一些数字的贡献是这些数字中最小的值.
反复阅读上一句话,然后再看一看式子就容易懂了.
code:
#include <bits/stdc++.h>
#define N 1000006
#define ll long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
ll f[N],a[N];
int main()
{
// setIO("input");
int i,j,n;
scanf("%d",&n);
for(i=1;i<=n;++i) scanf("%lld",&a[i]);
sort(a+1,a+1+n);
for(i=1;i<=n;++i)
{
f[i]=max(f[i-1],a[i]-f[i-1]);
}
printf("%lld\n",f[n]);
return 0;
}
最新文章
- 放弃安卓原生TimePicker,选择wheelView打造更漂亮的时间get,以及动态拉伸输入框布局,这些,这里都有!
- [stm32] STM32 Interrupts and events 系统了解(EXTI)及槽型光电开关tp850电路研究
- audio patch(10.9.3) [2.6.1]
- 学习android学习必备的java基础知识--四大内部类
- Logwatch的配置与使用
- 转:Why SeaJS
- jQuery中实现自定义方法的扩展
- Generate GUID using vbscript
- 【HDOJ】2888 Check Corners
- SQL 时间戳
- Android应用开发基础篇(7)-----BroadcastReceiver
- SSO单点登录的研究
- CentOS配置SSH免密登录
- java web 项目打包(war 包)并部署
- centos7防火墙设置
- C# HtmlAgilityPack 爬虫框架
- 数学——函数极限知识以及sympy库的limit
- Daubechies小波介绍
- IO流(6)获取功能
- OSLab课堂作业1