hdu 4374 单调队列优化动态规划
思路:我只想说,while(head<=rear&&que[rear].val+sum[j]-sum[que[rear].pos-1]<=dp[i-1][j]+num[i-1][j])表达式中,我把最后的num[i-1][j]丢了,检查了一整天啊!一整天!我那丢失的时间!
寻找从上一层到该层中最优的转换点,如果该转化点到该点超过t就出队。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define Maxn 110
#define Maxm 10010
#define inf 1000000000
using namespace std;
int dp[Maxn][Maxm],sum[Maxm],num[Maxn][Maxm];
int que[Maxm*];
void init()
{
memset(sum,,sizeof(sum));
memset(num,,sizeof(num));
}
inline int ReadInt()
{
int flag = ;
char ch;
int a = ;
while((ch = getchar()) == ' ' || ch == '\n');
if(ch == '-') flag = -;
else
a += ch - '';
while((ch = getchar()) != ' ' && ch != '\n')
{
a *= ;
a += ch - '';
}
return flag * a;
}
int main()
{
int n,m,x,t,i,j,head,rear;
while(scanf("%d%d%d%d",&n,&m,&x,&t)!=EOF){
init();
for(i=;i<=n;i++){
for(j=;j<=m;j++){
num[i][j]=ReadInt();
dp[i][j]=-inf;
}
}
memset(dp[],-,sizeof(dp));
dp[][x]=;
for(i=;i<=n;i++){
memset(sum,,sizeof(sum));
head=,rear=;
for(j=;j<=m;j++){
sum[j]=sum[j-]+num[i][j];
while(head<=rear&&dp[i-][que[rear]]+sum[j]-sum[que[rear]-]<=dp[i-][j]+num[i][j])
rear--;
que[++rear]=j;
while(j-que[head]>t&&head<=rear)
head++;
if(head<=rear)
dp[i][j]=dp[i-][que[head]]+sum[j]-sum[que[head]-];
}
head=,rear=;
memset(sum,,sizeof(sum));
for(j=m;j>=;j--){
sum[j]=sum[j+]+num[i][j];
while(head<=rear&&dp[i-][que[rear]]+sum[j]-sum[que[rear]+]<=dp[i-][j]+num[i][j])
rear--;
que[++rear]=j;
while(que[head]-j>t&&head<=rear)
head++;
if(head<=rear)
dp[i][j]=max(dp[i][j],dp[i-][que[head]]+sum[j]-sum[que[head]+]);
}
}
int ans=-inf;
for(i=;i<=m;i++)
ans=max(ans,dp[n][i]);
printf("%d\n",ans);
}
return ;
}
hdu 4374 单调队列优化动态规划的更多相关文章
- hdu 3401 单调队列优化动态规划
思路: 动态方程很容易想到dp[i][j]=max(dp[i][j],dp[i-w-1][j-k]-k*ap[i],dp[i-w-1][j+k]+k*bp[i]): dp[i][j]表示第i天拥有j个 ...
- hdu 3401 单调队列优化DP
Trade Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- HDU 2191 - 单调队列优化多重背包
题目: 传送门呀传送门~ Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种 ...
- hdu 3401 单调队列优化+dp
http://acm.hdu.edu.cn/showproblem.php?pid=3401 Trade Time Limit: 2000/1000 MS (Java/Others) Memor ...
- poj 3017 单调队列优化动态规划
思路:dp[i]=min{dp[j]+max(num[j+1]...num[i])},其中sum[i]-sum[j]<=m. 那么我们需要用单调队列维护j到i的最大值. #include< ...
- hdu 4374 单调队列
求一个最大k连续的子序列和 单调队列 #include<stdio.h> #include<string.h> #include<iostream> using ...
- HDU 3507 单调队列 斜率优化
斜率优化的模板题 给出n个数以及M,你可以将这些数划分成几个区间,每个区间的值是里面数的和的平方+M,问所有区间值总和最小是多少. 如果不考虑平方,那么我们显然可以使用队列维护单调性,优化DP的线性方 ...
- Luogu 2627 修建草坪 (动态规划Dp + 单调队列优化)
题意: 已知一个序列 { a [ i ] } ,求取出从中若干不大于 KK 的区间,求这些区间和的最大值. 细节: 没有细节???感觉没有??? 分析: 听说有两种方法!!! 好吧实际上是等价的只是看 ...
- 【单调队列优化dp】HDU 3401 Trade
http://acm.hdu.edu.cn/showproblem.php?pid=3401 [题意] 知道之后n天的股票买卖价格(api,bpi),以及每天股票买卖数量上限(asi,bsi),问他最 ...
随机推荐
- boost::bind 和 boost::function 基本用法
这是一篇介绍bind和function用法的文章,起因是近来读陈硕的文章,提到用bind和function替代继承,于是就熟悉了下bind和function的用法,都是一些网上都有的知识,记录一下,期 ...
- 转载 从Http到Https
转载自 http://www.cnblogs.com/silin6/p/5928503.html HTTP 当你在浏览器输入一个网址 (例如 http://tasaid.com)的时候,浏览器发起一个 ...
- HDU 4052 Adding New Machine (线段树+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4052 初始给你w*h的矩阵,给你n个矩形(互不相交),按这些矩形尺寸把初始的矩形扣掉,形成一个新的'矩 ...
- 亲和串(HDU2203)
http://acm.hdu.edu.cn/showproblem.php?pid=2203 题目意思很简单,求s1串所构成的环中是否有s2这个串 用CMP参考http://s.acmore.net/ ...
- UVaLive 6858 Frame (水题)
题意:给定一个矩形框架,给定一个小矩形,问你能不能正好拼起来. 析:很简单么,就三种情况,如果是1*1的矩形,或者是1*2的一定可以,然后就是上面和下面正好能是小矩形的整数倍,左右是少一,两个就是整数 ...
- Spring Data JPA教程, 第七部分: Pagination(未翻译)
The previous part of my Spring Data JPA tutorialdescribed how you can sort query results with Spring ...
- 简谈HTML5与APP技术应用
HTML5到底能给企业带来些什么? HTML5是近年来互联网行业的热门词汇,火的很.微软IE产品总经理发文: 未来的网络属于HTML5.乔布斯生前也在公开信<Flash之我见>中预言:像H ...
- 使用ASP.NET 构建 Web 应用程序快速入门-8小时的免费培训视频
- Scott Hanselman的中文博客[转载] [原文发表地址] Building Web Apps with ASP.NET Jump Start - 8 Hours of FREE Trai ...
- CloudStack 使用生态统计
http://shapeblue.com/
- CSS基础(02)
CSS 选择器 1.CSS3 选择器简介 在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素. 语法: 下面中"CSS" 列指示该属性是在哪个 CSS 版本中定义的.(C ...