强行卡内存

这题在CF上好像有道极相似的题

可以想到状态设计为dp[f][i][k]表示f在取完i-1时,此时可以取k个或k+1个的状态下的最大值。之前以为n是1e5,自己想不到怎么设计状态真的辣鸡,把题目扔给队友写,实际上n是1e4,k就算不断递增最大也只有200左右,实际上是开的下的。

由于最终局面下的最优决策是固定的,所以从后往前转移。

但是人家说本来题目就too simple了,觉得你这样申请空间还是太naive,会给你MLE。

可以注意到状态i只由i+k+1或i+k转移,k范围是200左右,那么实际上对于一个i只要保存它的临近的k大小的空间就可以完成转移了,也就是滚动数组。

/** @Date    : 2017-09-11 17:20:25
* @FileName: HDU 6199 1006 DP.cpp
* @Platform: Windows
* @Author : Lweleth (SoungEarlf@gmail.com)
* @Link : https://github.com/
* @Version : $Id$
*/
#include <bits/stdc++.h>
#define LL long long
#define PII pair<int ,int>
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 2e4+20;
const double eps = 1e-8; int dp[2][243][243];
int sum[N];
int main()
{
int T;
cin >> T;
while(T--)
{
int n;
scanf("%d", &n);
sum[0] = 0;
for(int i = 1; i <= n; i++)
{
scanf("%d", sum + i);
sum[i] += sum[i - 1];
}
MMF(dp);
for(int i = n; i > 0; i--)//0大
{
for(int k = 220; k > 0; k--)
{
if(i + k <= n)
{
dp[0][i%243][k] = max(dp[1][(i + k)%243][k], dp[1][(i + k + 1)%243][k + 1]+sum[i+k]-sum[i+k-1]);
dp[1][i%243][k] = min(dp[0][(i + k)%243][k], dp[0][(i + k + 1)%243][k + 1]-sum[i+k]+sum[i+k-1]);
}
else if(i + k == n + 1)
{
dp[0][i%243][k] = dp[1][(i + k)%243][k];
dp[1][i%243][k] = dp[0][(i + k)%243][k];
}
if(i + k <= n + 1)
{
dp[0][i%243][k] += (sum[i + k - 1]-sum[i - 1]);
dp[1][i%243][k] -= (sum[i + k - 1]-sum[i - 1]);
} }
//cout << dp[0][i][1] << endl;
}
printf("%d\n", dp[0][1][1]);
}
return 0;
}

HDU 6199 DP 滚动数组的更多相关文章

  1. hdu 1513(dp+滚动数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 思路:n这么大,可以采用滚动数组,然后就是求原串和反串的LCS了. #include<io ...

  2. hdu 1024 dp滚动数组

    #include <cstdio> #include <iostream> #include <algorithm> #include <queue> ...

  3. HDU 1024 Max Sum Plus Plus --- dp+滚动数组

    HDU 1024 题目大意:给定m和n以及n个数,求n个数的m个连续子系列的最大值,要求子序列不想交. 解题思路:<1>动态规划,定义状态dp[i][j]表示序列前j个数的i段子序列的值, ...

  4. hdu 3392(滚动数组优化dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3392 Pie Time Limit: 6000/3000 MS (Java/Others)    Me ...

  5. HDU 5119 Happy Matt Friends (背包DP + 滚动数组)

    题目链接:HDU 5119 Problem Description Matt has N friends. They are playing a game together. Each of Matt ...

  6. POJ 3666 Making the Grade (DP滚动数组)

    题意:农夫约翰想修一条尽量平缓的路,路的每一段海拔是A[i],修理后是B[i],花费|A[i] – B[i]|,求最小花费.(数据有问题,代码只是单调递增的情况) #include <stdio ...

  7. USACO 2009 Open Grazing2 /// DP+滚动数组oj26223

    题目大意: 输入n,s:n头牛 s个栅栏 输入n头牛的初始位置 改变他们的位置,满足 1.第一头与最后一头的距离尽量大 2.相邻两头牛之间的距离尽量满足 d=(s-1)/(n-1),偏差不超过1 3. ...

  8. hdu 1513 && 1159 poj Palindrome (dp, 滚动数组, LCS)

    题目 以前做过的一道题, 今天又加了一种方法 整理了一下..... 题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符. 方法一: 将该字符串与其反转求一次LCS,然后所求就是n减去 ...

  9. hdu 4576 (简单dp+滚动数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 题意:给出1~n的环,m个操作,每次能顺时针或逆时针走w步,询问最后在l~r这段区间内概率.(1 ...

随机推荐

  1. “我爱淘”第二冲刺阶段Scrum站立会议8

    完成任务: 完成学院分类的点击查看书籍功能,可以点击书的条目查看书的详细信息.完善界面显示,实现购买功能,优化提示,购买后就将该书从数据库中删去. 计划任务: 将书的详细信息进行完善,并且可以点击收藏 ...

  2. Alpha事后诸葛会议

    [设想和目标] Q1:我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? "小葵日记"是为了解决18-30岁年轻用户在记录生活时希望得到一美体验友好 ...

  3. alpha发布评论

    飞天小女警我们自己的礼物挑选工具完整度不高,页面简陋,还有很多需要完善和改进的地方,空间比较大,但是本身能力太不足. 个人比较喜欢奋斗吧兄弟做的食物链系统.感觉是可以拿来用的工具吧. 天天向上的游戏连 ...

  4. 将Python项目生成所有依赖包的清单requirements .txt文件

    在开发中不同的项目总会牵扯到各种不同作用的包安装,下面是总结一下对写好的项目自动生成依赖清单,以及在新环境下解决依赖的方法: 一:生成所有依赖清单requirements.txt 这里需要使用到的工具 ...

  5. java 使用volatile实现线程数据的共享

    java 使用volatile实现线程数据的共享 直接上代码看效果: public class VolatileTest extends Thread { private volatile boole ...

  6. codeforces 1023 D. Array Restoration 并查集

    D. Array Restoration time limit per test 1 second memory limit per test 256 megabytes input standard ...

  7. 当对象使用sort时候 前提是实现compareTo的方法

  8. iOS 通过网络请求获取图片的下载歌曲

    1.导入代理<NSURLConnectionDataDelegate> @interface ViewController ()<NSURLConnectionDataDelegat ...

  9. IDEA使用switch传入String编译不通过

    今天在使用IDEA的时候,用到switch分支语句,传入String参数的时候一直报错,下面是源码报错截图: 看错误提示并没有提到switch支持String类型,不过ava1.7之后就支持Strin ...

  10. BZOJ3622 已经没有什么好害怕的了(动态规划+容斥原理)

    显然可以转化为一个阶梯状01矩阵每行每列取一个使权值和为k的方案数.直接做不可做,考虑设f[i][j]为前i行权值和至少为j,即在其中固定了j行选1的方案数.设第i行从1~a[i]列都是1且a[i]+ ...