F - Financiers Game

这种两人博弈一般都可以用两个dp写, 一个dp描述第一个人的最优态, 第二个dp描述第二个人的最优态,难点在于优化空间。。。

我感觉这个空间开得有点玄学。。

dp[ op ][ l ] [ d ] [ k ] 表示到第op个人先手,在第任意轮的时候第一个人和第二个人取的个数只差不会超过180,所以用他们的差值开一维状态。

d = (l - 1) - (n - r), 只有区间 (l , n + d - l - 1)的情况下的最优值。

 #include<bits/stdc++.h>
#define LL long long
#define mk make_pair
using namespace std; const int N = 2e3 + ;
const int inf = 0x3f3f3f3f;
int B = , n;
int dp[][N][][], a[N]; int dfs(int l, int r, int k, int op) {
int d = (l - ) - (n - r);
int &ans = dp[op][l][B + d][k];
if(ans != -) return ans;
int ret;
if(op == ) {
if(l + k - == r) return dp[op][l][B + d][k] = a[r] - a[l - ];
else if(l + k - > r) return dp[op][l][B + d][k] = ; int ret1 = dfs(l + k, r, k, op ^ ) + a[l + k -] - a[l - ];
int ret2 = dfs(l + k + , r, k + , op ^ ) + a[l + k] - a[l - ];
ret = max(ret1, ret2);
} else {
if(l + k - == r) return dp[op][l][B + d][k] = -a[r] + a[l - ];
else if(l + k - > r) return dp[op][l][B + d][k] = ; int ret1 = dfs(l, r - k, k, op ^ ) - a[r] + a[r - k];
int ret2 = dfs(l, r - k - , k + , op ^ ) - a[r] + a[r - k - ];
ret = min(ret1, ret2);
}
return dp[op][l][d + B][k] = ret;
}
int main() {
memset(dp, -, sizeof(dp));
scanf("%d", &n);
for(int i = ; i <= n; i++)
scanf("%d", &a[i]), a[i] += a[i - ];
int ans = dfs(, n, , );
printf("%d\n", ans);
return ;
}
/*
*/

Codeforces Round #380 Div.2 F - Financiers Game的更多相关文章

  1. Codeforces Round #485 (Div. 2) F. AND Graph

    Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...

  2. Codeforces Round #486 (Div. 3) F. Rain and Umbrellas

    Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...

  3. Codeforces Round #501 (Div. 3) F. Bracket Substring

    题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...

  4. Codeforces Round #499 (Div. 1) F. Tree

    Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...

  5. Codeforces Round #376 (Div. 2)F. Video Cards(前缀和)

    题目链接:http://codeforces.com/contest/731/problem/F 题意:有n个数,从里面选出来一个作为第一个,然后剩下的数要满足是这个数的倍数,如果不是,只能减小为他的 ...

  6. Codeforces Round #271 (Div. 2) F. Ant colony (RMQ or 线段树)

    题目链接:http://codeforces.com/contest/474/problem/F 题意简而言之就是问你区间l到r之间有多少个数能整除区间内除了这个数的其他的数,然后区间长度减去数的个数 ...

  7. Codeforces Round #325 (Div. 2) F. Lizard Era: Beginning meet in the mid

    F. Lizard Era: Beginning Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

  8. Codeforces Round #271 (Div. 2) F题 Ant colony(线段树)

    题目地址:http://codeforces.com/contest/474/problem/F 由题意可知,最后能够留下来的一定是区间最小gcd. 那就转化成了该区间内与区间最小gcd数相等的个数. ...

  9. Codeforces Round #479 (Div. 3) F. Consecutive Subsequence (简单dp)

    题目:https://codeforces.com/problemset/problem/977/F 题意:一个序列,求最长单调递增子序列,但是有一个要求是中间差值都是1 思路:dp,O(n)复杂度, ...

随机推荐

  1. 【题解】 bzoj1055: [HAOI2008]玩具取名 (动态规划)

    bzoj1055,懒得复制,戳我戳我 Solution: 区间动规(以后开始动规会在solution前面标注是啥动规 我觉的这道题挺难想了,但其实状态定义了一下子就出来了(还是不行啊) 我们定义状态\ ...

  2. 【BZOJ2067】SZN(二分,动态规划,贪心)

    [BZOJ2067]SZN(二分,动态规划,贪心) 题面 权限题额 Description String-Toys joint-stock 公司需要你帮他们解决一个问题. 他们想制造一个没有环的连通图 ...

  3. java桌面应用开发可视化工具windowbuilder详细使用方法

    http://blog.csdn.net/qq_28859405/article/details/52562131

  4. Centos6.6下编译安装Apache2.2.31

    安装环境: [root@apache ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@apache ~]# uname -r ...

  5. Gulp 笔记

    Gulp是一款自动化构建工具 用npm安装 npm install -g gulp npm install --save-dev gulp 分别在全局和项目目录里安装. 然后在项目目录里创建gulpf ...

  6. 金融量化分析【day110】:Pandas-DataFrame读取与写入

    一.DataFrame DataFrame是一个表格型的数据结构,含有一组有序的列 DataFrame可以被看作是有Series组成的字典并且工用一个索引 1.创建方式 pd.DataFrame({' ...

  7. 在线Python学习网站

    目前我们使用的Python集成环境是Anaconda3,然后使用Jupyter Notebook和Spyder两个开发环境 Goole推出了在线的开发环境,在线网站: https://colab.re ...

  8. 对 JavaScript 下 namespace 功能的简单分析

    前些天在剥离 百度随心听 的播放器引擎时,看到了一个namespace方法,觉得新奇,当然只是对于我自己而言,我入门js不久,经验尚浅.之前看到网易还是新浪还是什么什么网站来着,也是用类似这种东西的, ...

  9. 20155303 2016-2017-2 《Java程序设计》第五周学习总结

    20155303 2016-2017-2 <Java程序设计>第五周学习总结 教材学习中的问题和解决过程 『问题一』:受检异常与非受检异常 『问题一解决』: 受检异常:这种在编译时被强制检 ...

  10. linux磁盘已满,文件占用情况

    du -sh /data0/* 如上,/data0/* 表示查看data0文件夹下各个目录的磁盘占用情况 df -h 查看总的磁盘占比