题意:
两个人分别从长度为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. hive 分桶及抽样调查

    1.分桶的概述 分区提供了一个隔离数据和优化查询的遍历方式.不是所有的数据集都可形成合力的分区 对于一张表或者分区,hive可以进一步组织成桶,也就是更为细粒度的数据范围 分区针对的是数据的存储路径( ...

  2. js实现千位符分隔

    前几天面试做保险项目的公司,被问到了一道实现千位符分割方法的题,乍一看挺简单,但做起来最后却没给出来一个合适的解决方法.回来自己琢磨了一个还行的答案. var num = 3899000001, ar ...

  3. [暑假集训Day1T1]黑暗城堡

    因为D[i]表示i号节点到1号节点的最短路径,所以可以先以1为源点跑一边SPFA,预处理出每个点到1号节点的最短路.之后开始考虑所谓的“最短路径生成树”,在这棵生成树中有以下性质:当fa[i]==no ...

  4. 获取Linux内核未导出符号的几种方式

    从Linux内核的2.6某个版本开始,内核引入了导出符号的机制.只有在内核中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL导出的符号才能在内核模块中直接使用.然而,内核并没有导出所 ...

  5. 查询sqlserver中表信息

    ALTER PROCEDURE [dbo].[GetTableInfo] @tableName NVARCHAR(MAX) AS BEGIN SELECT -- CASE -- WHEN col.co ...

  6. Ajax ——数据解析

             Ajax应用中数据解析是非常重要的一件事情.一般服务器返回数据有三种格式:txt , xml,  json 1.解析txt       当服务器返回的数据为字符串,则这种Ajax数据 ...

  7. JS window对象 返回前一个浏览的页面 back()方法,加载 history 列表中的前一个 URL。 语法: window.history.back();

    返回前一个浏览的页面 back()方法,加载 history 列表中的前一个 URL. 语法: window.history.back(); 比如,返回前一个浏览的页面,代码如下: window.hi ...

  8. loj2542 「PKUWC2018」随机游走 MinMax 容斥+树上高斯消元+状压 DP

    题目传送门 https://loj.ac/problem/2542 题解 肯定一眼 MinMax 容斥吧. 然后问题就转化为,给定一个集合 \(S\),问期望情况下多少步可以走到 \(S\) 中的点. ...

  9. 在项目中使用 Maven 私服

    #在项目中使用 Maven 私服 在 Maven settings.xml 中添加 Nexus 认证信息(servers 节点下): <server> <id>nexus-re ...

  10. Restful风格接口浅析

    为什么使用RESTful1.JSP技术可以让我们在页面中嵌入Java代码,但是这样的技术实际上限制了我们的开发效率,因为需要我们Java工程师将html转换为jsp页面,并写一些脚本代码,或者前端代码 ...