题意:
两个人分别从长度为n的数列的两端开始取数,如果前一 个人取了k个数,后一个人必须取k或k+1个。
第一个人最 开始可以取1个或2个,不能操作时结束。
两个人都希望自 己取到的数字之和尽量大,并保持绝对理智,求最后他们 取到的数字之和之差。
n≤4000。
 
以下是bb----------------------------------------------------
 
这道题我看了老师的讲稿,,跟着老师的讲稿里的DP做,,然后,,妥妥MLE。(也有可能是gyf我太菜了。
当然,神仙老师的思路是对的
老师的做法是这么写的:设f[i][j][k][0/1]表示左侧第一个未取的数是第i个,右侧第一个未取的数是第j个,当前k的值和操作方法。
但很明显会MLE啊由题意有f[4001][4001][16][2],woc内存占用1.6G。
下面是我惨痛的教训(当时我还不知道我内存爆了!!因为我忘记乘int的4了,所以一直以为我的内存在400M-,还问了旁边电脑科技巨佬jxy,外加一个洛谷讨论):

 后来我果断打开题解(雾
 
发现可以hash。正好那边洛谷讨论指出我没有乘int的四个字节。。绝望。
 
以上是bb----------------------------------------
 
 
说正解吧
 
设f[i][j][k][0/1]表示左侧第一个未取的数是第i个,右侧第一个未取的数是第j个,当前k的值和操作方法。
丛表面看像O(nmk)。
仔细观察,发现k是log2n 级别的!
仔细观察,发现i与n-j相差不会超过k级别!
(其实都是课件里的东西)
 
所以我们成功的不用任何操作的将O(nmk)转移到了O(n2)级别(大雾)
 
这就是所谓的方程的冗余,只要你常数小,说不定考场上你以为暴力的算法就AC了。。
 
 
那么好了,将f[i][j][k][0/1]hash存储。
直接记忆化了动态方程太恶心不想写(虽然这是要用常数换的
 
完结撒花。
 
Code:
#include<bits/stdc++.h>
using namespace std;
#define getsum(l,r) (sum[r] - sum[l-1])

int n;
],sum[];

int Hash(int a,int b,int c,int d){
    +c)*+d) %();
} 

int dfs(int x,int y,int k,int now){
     < k);
     == k):);
    int num = Hash(x,y,k,now);
    if(~dp[num])return dp[num];
    ;
    if(now){
        ans = dfs(x,y-k,k,) - getsum(y-k+,y);
        ,k+,)-getsum(y-k,y));
        return dp[num] = ans;
    }
    else{
        ans = dfs(x + k,y,k,)+getsum(x,x+k-);
        ,y,k+,)+getsum(x,x+k));
        return dp[num] = ans;
    }
}

int main(){
    ios::sync_with_stdio();
    cin>>n;
    memset(dp,-,sizeof(dp));
    ;i<=n;++i)cin>>sum[i],sum[i] += sum[i-];
    cout<<dfs(,n,,);
    ;
}
 
 

[Codeforces 729F] Financiers Game的更多相关文章

  1. Codeforces Round #380 Div.2 F - Financiers Game

    F - Financiers Game 这种两人博弈一般都可以用两个dp写, 一个dp描述第一个人的最优态, 第二个dp描述第二个人的最优态,难点在于优化空间... 我感觉这个空间开得有点玄学.. d ...

  2. Financiers Game CodeForces - 737D (博弈论)

    直接暴力区间DP的话是$O(n^3)$, 关键注意到每步走的距离差不超过1, 所以差最大是$O(\sqrt{n})$的, 所以实际上有用的状态是$O(n^2)$的, 可以通过.

  3. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  4. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  5. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  6. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  7. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  8. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  9. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

随机推荐

  1. ERROR [localhost-startStop-1] - Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/ap

    ERROR [localhost-startStop-1] - Context initialization failed org.springframework.beans.factory.Bean ...

  2. 安装Kubernetes V1.16.2

    安装Kubernetes V1.16.2 准备硬件环境 利用VirtualBox准备两台Linux虚拟机(K8S集群2台起步),系统用CentOS(我用的是的CentOS-7-x86_64-DVD-1 ...

  3. [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分)

    [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分) 题面 给出一个无向图,以及q条有向路径.问是否存在一种给边定向的方案,使得 ...

  4. BFS+打印路径

    题目是给你起点sx,和终点gx:牛在起点可以进行下面两个操作: 步行:John花一分钟由任意点X移动到点X-1或点X+1. 瞬移:John花一分钟由任意点X移动到点2*X. 你要输出最短步数及打印路径 ...

  5. P5468 [NOI2019]回家路线

    传送门 看题目一眼斜率优化,然后写半天调不出来 结果错误的 $dfs$ 有 $95$ 分?暴力 $SPFA$ 就 $AC$ 了? 讲讲正解: 显然是斜率优化的式子: 先不考虑 $q_{s_k}$ 的贡 ...

  6. THUPC/CTS/APIO2019划水记

    THUPC:划水的咸鱼 CTS:打铁 APIO:压线cu 终于又回归了文化课. 落下10天的课程,OI又得停一停了 这次划水,又见识了许多的神仙,再一次被吊打 5.11~5.20,有太多的事情需要回忆 ...

  7. Zookeeper——启动闪退

      Zookeeper好久不启动了,昨天项目要用Zookeeper了,我昨天突然启动它,调皮的zk居然害羞不让我看见它,启动不了,一启动就闪退,为啥呢?其实是因为报错了,有错zk启动时就会报错,所以昨 ...

  8. C# 对象转JSON字符串

    对象转JSON字符串 /// <summary> /// 对象转Json字符串 /// </summary> /// <param name="obj" ...

  9. reids 持久化

    RDB: RDB是整个内存压缩过的Snapshot,RDB 的数据结构,可以配置符合的快照触发条件,默认如下 900s  1次修改 300s 10次修改 60s 10000 次修改 自动备份为dump ...

  10. BZOJ2097 [Usaco2010 Dec]Exercise 奶牛健美操 贪心

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2097 题解 显然二分一个 \(mid\) 表示每一块的直径长度的最大值,求最少需要多少连通块. ...