【hdu 4374】One Hundred Layer
【题目链接】
【算法】
不难看出,这题可以用动态规划来解决
f[i][j]表示第i行第j列能够取得的最大分数
则如果向右走,状态转移方程为f[i][j]=max{f[i-1][k]+a[i][k]+a[i][k+1]+...+a[i][j]}(i-T<=k<=j)
如果向左走,则状态转移方程为f[i][j]=max{f[i-1][k]+a[i][k]+a[i][k-1]+...+a[i][j]} (j<=k<=i+T)
用前缀和优化,s[i][j]表示第i行前j个数的和
则式子被简化为 :
向右走 : f[i][j] = max{f[i-1][k]+s[i][j]-s[i][k-1]} (i-T<=k<=j)
向左走 : f[i][j] = max{f[i-1][k]+s[i][k]-s[i][j-1]} (j<=k<=i+T)
但是这样做还是会TLE,所以我们继续优化 :
我们可以将第一个状态转移方程中s[i][j]提出,式子被写成f[i][j] = max{f[i-1][k]-s[i][k-1]}+s[i][j] (i-T<=k<=j)
将第二个状态转移方程中s[i][j-1]提出,式子被写成f[i][j] = max{f[i-1][k]+s[i][k]}+s[i][j-1] (j<=k<=i+T)
于是我们就可以用单调队列维护最值,时间复杂度 : O(数据组数*N*M)
【代码】
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100
#define MAXM 10000 typedef long long LL; struct info {
LL x,val;
};
LL i,j,N,M,X,T,tmp,ans;
LL a[MAXN+][MAXM+],s[MAXN+][MAXM+],f[MAXN+][MAXM+];
deque<info> q; template <typename T> inline void read(T &x) {
LL f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
for (; isdigit(c); c = getchar()) x = x * + c - '';
x *= f;
}
template <typename T> inline void write(T x) {
if (x < ) { putchar('-'); x = -x; }
if (x > ) write(x/);
putchar(x%+'');
}
template <typename T> inline void writeln(T x) {
write(x);
puts("");
} int main() { while (cin >> N >> M >> X >> T) {
ans = -2e9;
for (i = ; i <= N; i++) {
for (j = ; j <= M; j++) {
read(a[i][j]);
}
} for (i = ; i <= N; i++) {
for (j = ; j <= M; j++) {
s[i][j] = s[i][j-] + a[i][j];
}
} for (i = ; i <= N; i++) {
for (j = ; j <= M; j++) {
f[i][j] = -2e9;
}
}
for (i = X; i >= X - T; i--) f[][i] = s[][X] - s[][i-];
for (i = X; i <= X + T; i++) f[][i] = s[][i] - s[][X-]; for (i = ; i <= N; i++) {
q.clear();
for (j = ; j <= M; j++) {
while ((!q.empty()) && (j - q.front().x > T)) q.pop_front();
tmp = f[i-][j] - s[i][j-];
while ((!q.empty()) && (tmp >= q.back().val)) q.pop_back();
q.push_back((info){j,tmp});
f[i][j] = q.front().val + s[i][j];
}
q.clear();
for (j = M; j >= ; j--) {
while ((!q.empty()) && (q.front().x - j > T)) q.pop_front();
tmp = f[i-][j] + s[i][j];
while ((!q.empty()) && (tmp >= q.back().val)) q.pop_back();
q.push_back((info){j,tmp});
f[i][j] = max(f[i][j],q.front().val-s[i][j-]);
}
}
for (i = ; i <= M; i++) ans = max(ans,f[N][i]);
writeln(ans);
} return ; }
【hdu 4374】One Hundred Layer的更多相关文章
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- 【HDU 5647】DZY Loves Connecting(树DP)
pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- 【HDU 2196】 Computer(树的直径)
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
- 【HDU 2196】 Computer (树形DP)
[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...
- 【HDU 5145】 NPY and girls(组合+莫队)
pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...
- 【hdu 1043】Eight
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...
- 【HDU 3068】 最长回文
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...
- 【HDU 4699】 Editor
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...
随机推荐
- centos 关于防火墙的命令
CentOS7默认的防火墙不是iptables,而是firewalle. 安装iptable iptable-service #先检查是否安装了iptables service iptables st ...
- Jetson TK1 四:重新安装系统(刷机)
转载:http://blog.sina.com.cn/s/blog_bab3fa030102vk21.html Jetson TK1是NVIDIA基于Tegra K1开发的一块低成本开发板,板载一块T ...
- Loj #6307. 「雅礼国庆 2017 Day1」Clique
link: https://loj.ac/problem/6307 最大团转补图的独立集,这样的话只有r[x]<l[y]或者r[y]<l[x],x和y才能连边,所以排序之后乱搞就行了. 需 ...
- 蓝桥java 入门训练 Fibonacci数列
import java.util.Scanner; public class Main{ public static void main(String[] args) { int maxn=10000 ...
- Spring的Bean定义
以下内容引用自http://wiki.jikexueyuan.com/project/spring/bean-definition.html: Bean定义 被称作bean的对象是构成应用程序的支柱也 ...
- 局域网Cesium离线影像及瓦片影像地图加载
1.Cesium简介 优点: cesium展示地图数据效果比较好,解析2D地图各种不同服务类型的数据源,比如百度地图.天地图.arcgis地图.BingMap.openStreetMap.MapBox ...
- VMware Workstation 虚拟机设置连接U盘
首先确保主机有开启"VMware USB Arbitration Service"服务,而且在执行中. 如图:(我的系统是win8.1 ) 在VMware Workstation虚 ...
- 【转载】云计算的三种服务模式:IaaS,PaaS和SaaS
一张图就看懂了.其他的都不用说了. 原文:http://blog.csdn.net/hjxgood/article/details/18363789
- 深度神经网络多任务学习(Multi-Task Learning in Deep Neural Networks)
https://cloud.tencent.com/developer/article/1118159 http://ruder.io/multi-task/ https://arxiv.org/ab ...
- 将一个文件从gbk编码转换为utf8编码
用django展示模板时,出现如下错误: 'utf8' codec can't decode byte 0xd3 in position 197: invalid continuation byte ...