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),问他最 ...
随机推荐
- POJ 2031 Building a Space Station (最小生成树)
Building a Space Station 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/C Description Yo ...
- 跟Android自带模拟器说拜拜,Mac Genymotion 使用心得
今天看到网上一片文章点击打开链接,很是激动,套用原作者的话,性能卓越作为历史上最快的Android模拟器(没有之一),秒级开机关机速度足够让你膜拜了(粗略估计5-20s不等),我的Mac上面运行And ...
- Linux命令行访问网页
找到个好资料,备份行: http://hi.baidu.com/oyvfhp/blog/item/3aa5ced5b40563d351da4bb0.html CURL --- 命令行浏览器 这东西 ...
- HttpContext讲解
http://www.cnblogs.com/scy251147/p/3549503.html http://www.360doc.com/content/14/0526/10/17655805_38 ...
- 【转】The Zen of Python
http://www.python.org/dev/peps/pep-0020/ Beautiful is better than ugly. Explicit is better than impl ...
- ios 7.1 7.1.1 半完美越狱后 电脑訪问手机越狱文件夹的方法
7.1和7.1.1因为越狱不成熟,半完美越狱后电脑上无法訪问系统越狱文件夹,如var usr 等等. 今天有些意外地发现,能够在电脑上使用手机的越狱文件夹我手机 i4 7.1.1 联通 半完美越狱,没 ...
- ListView删除选中的多项目
//ListView删除选中的多项目function DeleteMultSelItems(ListView:TListView):Boolean;var I: Integer;begin Res ...
- WebBrowser 禁用脚本错误提示
public partial class Text : UserControl { public Text() { ...
- 关于AS3的垃圾回收
FlashPlayer运行GC(Gabage Collection)的时间并不固定,它会根据你的内存的占用情况来决定运行GC的时间.它会根据用户机器的内存值来设定一个阀值,然后将程序的占用内存量保存在 ...
- android152 笔记 2
27.谈谈UI中, Padding和Margin有什么区别? Padding 文字对边框, margin是控件对父窗体. 28. widget相对位置的完成在activity的哪个生命周期阶段实现.控 ...