Codeforces Round #380 Div.2 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的更多相关文章
- Codeforces Round #485 (Div. 2) F. AND Graph
Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...
- Codeforces Round #486 (Div. 3) F. Rain and Umbrellas
Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...
- Codeforces Round #501 (Div. 3) F. Bracket Substring
题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...
- Codeforces Round #499 (Div. 1) F. Tree
Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...
- Codeforces Round #376 (Div. 2)F. Video Cards(前缀和)
题目链接:http://codeforces.com/contest/731/problem/F 题意:有n个数,从里面选出来一个作为第一个,然后剩下的数要满足是这个数的倍数,如果不是,只能减小为他的 ...
- Codeforces Round #271 (Div. 2) F. Ant colony (RMQ or 线段树)
题目链接:http://codeforces.com/contest/474/problem/F 题意简而言之就是问你区间l到r之间有多少个数能整除区间内除了这个数的其他的数,然后区间长度减去数的个数 ...
- 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 ...
- Codeforces Round #271 (Div. 2) F题 Ant colony(线段树)
题目地址:http://codeforces.com/contest/474/problem/F 由题意可知,最后能够留下来的一定是区间最小gcd. 那就转化成了该区间内与区间最小gcd数相等的个数. ...
- Codeforces Round #479 (Div. 3) F. Consecutive Subsequence (简单dp)
题目:https://codeforces.com/problemset/problem/977/F 题意:一个序列,求最长单调递增子序列,但是有一个要求是中间差值都是1 思路:dp,O(n)复杂度, ...
随机推荐
- 如何使用Python对Instagram进行数据分析?
我写此文的目的在于展示以编程的方式使用Instagram的基本方法.我的方法可用于数据分析.计算机视觉以及任何你所能想到的酷炫项目中.Instagram是最大的图片分享社交媒体平台,每月活跃用户约五 ...
- 【BZOJ1201】[HNOI2005]数三角形(暴力)
[BZOJ1201][HNOI2005]数三角形(暴力) 题面 BZOJ 洛谷 题解 预处理每个点向四个方向可以拓展的最大长度,然后钦定一个点作为三角形的某个顶点,暴力枚举三角形长度,检查这样一个三角 ...
- bzoj1485: [HNOI2009]有趣的数列(Catalan数)
一眼卡特兰数...写完才发现不对劲,样例怎么输出$0$...原来模数不一定是质数= =... 第一次见到模数不是质数的求组合数方法$(n,m\leq 10^7)$,记录一下... 先对于$1$~$n$ ...
- 【CF580C】Kefa and Park
题目大意:给定一棵 N 个节点的有根树(其中根节点始终为 1 号节点),点有点权,点权只有 1 和 0 两种,求从根节点到叶子节点的路径中,有多少条路径满足:路径上最大连续点权为 1 的节点个数不超过 ...
- 如何在Ubuntu-14.04上安装g++-6.3 ?
特别注意: ppa:ubuntu-toolchain仅为尝鲜测试版,并非官方稳定版. 以下仅用于学习,不建议进行以下操作,以免出现包依赖关系问题,影响系统稳定性. askUbuntu github a ...
- js完整教程一 : 基本概念和数组操作
文章提纲 JS相关常识 JS基本概念 实践 总结 JS相关常识 js是一种可以与HTML标记语言混合使用的脚本语言,其编写的程序可以直接在浏览器中解释执行. 一.组成 js是一种专门为网页交互设计的脚 ...
- JavaScript基本数据类型介绍
JavaScript基本数据类型介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是javascript JavaScript一种直译式脚本语言,是一种动态类型.弱类型. ...
- 转iOS UIAppearance使用详解
iOS5及其以后提供了一个比较强大的工具UIAppearance,我们通过UIAppearance设置一些UI的全局效果,这样就可以很方便的实现UI的自定义效果又能最简单的实现统一界面风格,它提供如下 ...
- 工具类 | window批处理杀死指定端口进程
window批处理杀死指定端口进程,注意保存时使用ansi格式,运行输入端口即可 @echo off setlocal enabledelayedexpansion set /p port=请输入端口 ...
- eclipse 关闭控制台 自动弹出
Eclipse的控制台console有时候经常的跳出来,非常的烦人! 尤其是在调试期间跳出,以下是分享一下设置操作: 让它不经常的调出来,可以按下面的操作去掉它: windows -> p ...