poj3926
dp+优化
很明显可以用单调队列优化。
记录下自己犯的sb错误: 数组开小,sum没搞清。。。
#include<cstdio>
#include<cstring>
using namespace std;
const int N = , M = ;
int n, m, k, ans;
int q[M];
int dp[N][M], sum[N][M], dis[N][M];
inline int max(int x, int y)
{
return x > y ? x : y;
}
inline int read()
{
int x = , f = ; char c = getchar();
while(c < '' || c > '') { if(c == '-') f = -; c = getchar(); }
while(c >= '' && c <= '') { x = x * + c - ''; c = getchar(); }
return x * f;
}
int main()
{
//dp[i][j] = dp[i - 1][x] + sum[j] - sum[x - 1]
//dp[i][j] = dp[i - 1][x] + sum[x] - sum[j - 1]
while(scanf("%d%d%d", &n, &m, &k))
{
memset(dp, , sizeof(dp));
ans = ;
if(n == && m == && k == ) break;
++n;
++m;
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j)
{
int x;
x = read();
sum[i][j] = sum[i][j - ] + x;
}
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j)
{
int x;
x = read();
dis[i][j] = dis[i][j - ] + x;
}
for(int i = ; i <= n; ++i)
{
int l = , r = ;
q[++r] = ;
for(int j = ; j <= m; ++j)
{
while(l <= r && dp[i - ][j] - sum[i][j] > dp[i - ][q[r]] - sum[i][q[r]]) --r;
q[++r] = j;
while(l <= r && dis[i][j] - dis[i][q[l]] > k) ++l;
dp[i][j] = dp[i - ][q[l]] + sum[i][j] - sum[i][q[l]];
}
l = ;
r = ;
q[++r] = m;
for(int j = m; j; --j)
{
while(l <= r && dp[i - ][j] + sum[i][j] > dp[i - ][q[r]] + sum[i][q[r]]) --r;
q[++r] = j;
while(l <= r && dis[i][q[l]] - dis[i][j] > k) ++l;
dp[i][j] = max(dp[i][j], dp[i - ][q[l]] + sum[i][q[l]] - sum[i][j]);
if(i == n) ans = max(ans, dp[i][j]);
}
}
printf("%d\n", ans);
}
return ;
}
poj3926的更多相关文章
- poj3926 parade (单调队列+dp)
题意:有n行路,每行路被分成m段,每一段有长度和权值,要求从最下面一行走到最上面一行某个位置,可以从相邻两行的同一列交点往上走,并且在同一行走的长度要<=K,求走过的最大权值 设f[i][j]为 ...
随机推荐
- js 零碎
function具有一个属性是length,表示希望接收到的命名参数的个数.可以通过arguments获取参数.arguments.callee表示函数本身,递归时有用,也可以通过arguments. ...
- 汇编:MSR/MRS/BIC指令
1.MRS指令MRS指令的格式为:MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR)MRS指令用于将程序状态寄存器的内容传送到通用寄存器中.该指令一般用在以下两种情冴: Ⅰ.当需要改 ...
- iOS标准库中常用数据结构和算法之查找
参数: key: [in] 要查找的元素.base:[in] 数组元素的首地址.nelp: [in/out] 数组的元素个数指针.width: [in] 数组中每个元素的尺寸.compar: [in] ...
- tp定时任务,传参问题
<?phpnamespace app\command; use think\console\Command;use think\console\Input;use think\console\i ...
- LINUX -- pthread_detach()与pthread_join()
pthread_detach()即主线程与子线程分离,子线程结束后,资源自动回收. int pthread_join(pthread_t tid, void **thread_return); {su ...
- 关于panda中dataframe的与&运算*(stackoverflow高票答案)
85 down vote favorite 31 What explains the difference in behavior of boolean and bitwise operations ...
- 关于javascript原型链的记录
构造函数拥有名为prototype属性,每个对象都拥有__proto__属性,而且每个对象的__proto__属性指向自身构造函数prototype. **当调用某种方法或属性时,首先会在自身调用或查 ...
- Linux之FTP/TFTP(vsftp、vsftpd) HTTP(httpd、apache) DHCP(dhcpd)
FTP/TFTP(vsftp.vsftpd): FTP是File Transfer Protocol(文件传输协议)而中文简称为"文传协议".用于Internet上的控制文件的双向 ...
- 【codeforces 527B】Error Correct System
[题目链接]:http://codeforces.com/contest/527/problem/B [题意] 给你两个字符串; 允许你交换一个字符串的两个字符一次: 问你这两个字符串最少会有多少个位 ...
- 中国省市区地址三级联动插件---jQuery Distpicker
插件描述:distpicker是一款可以实现中国省市区地址三级联动jQuery插件.它使用简单,简单设置即可完成中国省市区地址联动效果. [官网]https://fengyuanchen.github ...