题意: 一排数,两个人轮流取数,保证取的位置递增,每个人要使自己取的数的和尽量大,求两个人都在最优策略下取的和各是多少。

注:双方都知道对方也是按照最优策略取的。。。

傻逼推了半天dp。。。。。。然后看kpm的代码里一个语句解决

 KPM大概思路:倒着取,设当前两人最大和分别为A和B(A为先取的人)。。如果B+W[i]>A就把A和B交换(先取的人可以按照更优的取法,后手无人权。。)..让A取W[i]

 接下来是蒟蒻的傻逼写法:

  f[0][i],f[1][i]分别表示第1个人和第2个人,在i~n中取了第i个数的最大总和。也是倒着取。。。

  f[0][i]=max{f[0][j1]}+W[i],(j1>i)所以我们维护一下j1就好了。但同时,因为有另一个人在取数,所以j1不可能随便取。。。

  因为取的位置递增,且对方也是按最优策略取的,所以i<j1<k1;(i<k1<=n且使得f[1][k1]在f[1][i+1.....n]中最大)。

  每次算f[0][i]的时候先更新一下k1和j1。。。求f[1][i]的时候同理。

  因为k1和j1是递减的,所以总的时间复杂度还是O(n)。

每次碰到有关博弈的题就抓瞎。。。

 #include<cstdio>
#include<iostream>
#include<cstring>
#define ll long long
using namespace std;
const int maxn=;
ll f[][maxn],ans,ans1;
int j1,k0,j0,k1,lastj1,lastk1;
int val[maxn];
int i,j,k,n,m;
int ra;char rx;
inline int read(){
rx=getchar();ra=;
while(rx<''||rx>'')rx=getchar();
while(rx>=''&&rx<='')ra*=,ra+=rx-,rx=getchar();return ra;
}
int main(){
n=read();
for(i=;i<=n;i++)val[i]=read();j0=k0=n;j1=k1=n+;lastj1=lastk1=n;
f[][n]=f[][n]=val[n];ans=n;
for(i=n-;i;i--){
if(f[][i+]>=f[][j0]){
j0=i+;
for(j=lastj1;j>j0;j--)if(f[][j]>=f[][j1])j1=j;lastj1=j0+;
}
f[][i]=(ll)val[i]+f[][j1];
if(f[][i+]>=f[][k0]){
k0=i+;
for(j=lastk1;j>k0;j--)if(f[][j]>=f[][k1])k1=j;lastk1=k0+;
}
f[][i]=(ll)val[i]+f[][k1];
if(f[][i]>=f[][ans])ans=i;
}
for(i=ans+;i<=n;i++)if(f[][i]>ans1)ans1=f[][i];
printf("%lld %lld\n",f[][ans],ans1);
}

[bzoj1783] [Usaco2010 Jan]Taking Turns的更多相关文章

  1. bzoj 1783: [Usaco2010 Jan]Taking Turns

    1783: [Usaco2010 Jan]Taking Turns Description Farmer John has invented a new way of feeding his cows ...

  2. bzoj 1783: [Usaco2010 Jan]Taking Turns【贪心+dp】

    不知道该叫贪心还是dp 倒着来,记f[0][i],f[1][i]分别为先手和后手从n走到i的最大值.先手显然是取最大的,当后手取到比先手大的时候就交换 #include<iostream> ...

  3. BZOJ2021: [Usaco2010 Jan]Cheese Towers

    2021: [Usaco2010 Jan]Cheese Towers Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 184  Solved: 107[Su ...

  4. 2020: [Usaco2010 Jan]Buying Feed, II

    2020: [Usaco2010 Jan]Buying Feed, II Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 220  Solved: 162[ ...

  5. 【BZOJ】2021: [Usaco2010 Jan]Cheese Towers(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2021 噗,自己太弱想不到. 原来是2次背包. 由于只要有一个大于k的高度的,而且这个必须放在最顶,那 ...

  6. 【BZOJ】2020: [Usaco2010 Jan]Buying Feed, II (dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2020 和背包差不多 同样滚动数组 f[j]表示当前位置j份食物的最小价值 f[j]=min(f[j- ...

  7. BZOJ 2020 [Usaco2010 Jan]Buying Feed,II:贪心【定义价值】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2020 题意: FJ开车去买K份食物. 如果他的车上有X份食物,每走一里就花费X元. FJ的 ...

  8. BZOJ 2021 [Usaco2010 Jan]Cheese Towers:dp + 贪心

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2021 题意: John要建一个奶酪塔,高度最大为m. 他有n种奶酪.第i种高度为h[i]( ...

  9. BZOJ2020: [Usaco2010 Jan]Buying Feed II

    [传送门:BZOJ2020] 简要题意: 约翰开车回家,遇到了双十一节,那么就顺路买点饲料吧.回家的路程一共有E 公里,这一路上会经过N 家商店,第i 家店里有Fi 吨饲料,售价为每吨Ci 元.约翰打 ...

随机推荐

  1. IntelliJ IDEA如何设置头注释,自定义author和date

    下面这张图,保证你一看就会: 下面这个模板,你拿去改一改就行了. /** * @Author: Gosin * @Date: ${DATE} ${TIME} */ 如果觉得上面名字下面的波浪线碍眼,可 ...

  2. vue-router项目实战总结

    今天来谈谈vue项目{vue,vue-router,component}三大神将之一的vue-router.作为我们前后端分离很重要的实践之一,router帮我们完成了SPA应用间的页面跳转. 并且, ...

  3. override与重载(overload)的区别

    重载是相同函数名字.参数或参数类型不同,进行多次承载以适应不同的需要.(orerload)是面向过程的重载. (override)是面向对象的重载.是进行基类中的函数重写.

  4. Anti-pattern/反模式

      常见的与"直觉"相背离的anti-pattern产生的实际原因是没有深入.全面地考虑问题,即只关注到自己关心的方面,忽略了其他重要的.起相反作用的因素. 所以这个"直 ...

  5. Jmeter 创建FTP测试计划

    FTP服务主要提供上传和下载功能. 操作步骤: 1.创建一个线程组 2.线程组--->添加--->配置元件--->FTP请求缺省值:输入服务器名称或IP. 3.线程组--->添 ...

  6. IIS加载JSON文件 错误 404

    问题描述 在发布项目的时候,有一些文件是json文件,在网页中进行加载,但是在IIS7发布的时候,json文件居然是404,无法找到,在URL上输入地址也一样. 错误原因 IIS内部机制,不支持直接访 ...

  7. linux大文件分包压缩和批量解压命令tar // tar 排除指定目录

    压缩命令主要用到tar打包和split分割,命令如下: tar czf - aaa | split -b 1024m - bbb.tar.gz_ aaa可以是文件也可以是目录, 大小可以是b.k.m这 ...

  8. Python学习_10__python2到python3

    同样作为动态语言,python的面相对像和ruby有很多类似的地方,这里还是推荐<Ruby元编程>一书来参考学习python的面向对象.然而python并不是纯面向对象设计,所以很多rub ...

  9. Ruby学习之代码块

    代码块在其他的语言中都或多或少接触过一些,如perl中sort{$a<=>$b}keys,传入代码块实现按数值排序,在swift中用到闭包,更加深入学习到training closure. ...

  10. Head First设计模式之适配器模式

    一.定义 适配器模式把一个类的接口,变换成客户端所期待的另一种接口,使原本因接口不匹配的两个类能够在一起工作. 二.结构 角色: Client:用户类,使用新接口Target来完成某些特定的需求. T ...