题意:
两个人分别从长度为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. 浅谈随机数发生器(C语言)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/svitter/article/details/30971395 本文出自:点击打开链接 本来在做数据 ...

  2. Spring Data Redis实战之提供RedisTemplate

    参考: http://www.cnblogs.com/edwinchen/p/3816938.html 本项目创建的是Maven项目 一.pom.xml引入dependencies <depen ...

  3. 【问题解决方案】GitHub仓库重构之将某个或某些文件夹移动到其他文件夹内

    仓库重构时遇到的问题,在GitHub页面里好像没有类似的操作按钮? 搜了一下好像要用到一些命令比如rm等,但是我对Linux类的命令不是很熟悉 于是想试试曲线救国,先把远程库的文件pull到本地,在本 ...

  4. H5中滚动到底部的事件

    问题:在H5中,我们有这样的需求:例如有列表的时候,滚动到底部时,需要加载更多. 解决方案:可以采用window的滚动事件进行处理 分析:如果滚动是针对整个屏幕而言的(不针对于某个界面小块),那么这个 ...

  5. C/C++字符串和其他类型转换

    C语言中string char int类型转换 转载自:http://blog.sina.com.cn/s/blog_63041bb801016b4x.html ,char型数字转换为int型 &qu ...

  6. vue,一路走来(17)--底部tabbar切换

    <router-link></router-link>存在router-link-active属性,那么底部tabbar切换就简单多了.不会再出现刷新回到第一个的bug. &l ...

  7. Codeforces Round #392 (Div. 2) - A

    题目链接:http://codeforces.com/contest/758/problem/A 题意:给定N个城市的福利,国王现在想让每个城市的福利都一致.问最少需要花多少钱使得N个城市的福利值都一 ...

  8. usb server新产品(旧老板设备)-给自己一个学习硬件的动力

  9. Sass-乘法

    Sass 中的乘法运算和前面介绍的加法与减法运算还略有不同.虽然他也能够支持多种单位(比如 em ,px , %),但当一个单位同时声明两个值时会有问题.比如下面的示例: 编译的时候报“20px*px ...

  10. k8s-calico【转载】

    环境 系统:centos7.3192.168.40.50 local-master192.168.40.51 local-node1192.168.40.52 local-node2 master: ...