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的更多相关文章

  1. poj3926 parade (单调队列+dp)

    题意:有n行路,每行路被分成m段,每一段有长度和权值,要求从最下面一行走到最上面一行某个位置,可以从相邻两行的同一列交点往上走,并且在同一行走的长度要<=K,求走过的最大权值 设f[i][j]为 ...

随机推荐

  1. jQuery——属相操作

    属性获取:attr(属性名), 属性设置:attr(属性名,具体值) 移除属性:removeAttr(属性名) 特殊情况:prop(属性名).prop(属性名,具体值):表单中状态属性checked. ...

  2. html——细线表格

    细线: 1.table表格设置背景色 2.table中设置单元格距离 3.tr标签设置另外一种背景色 <!DOCTYPE html> <html> <head lang= ...

  3. SQL基本操作——创建索引

    CREATE INDEX 语句用于在表中创建索引.在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 索引:您可以在表中创建索引,以便更加快速高效地查询数据.用户无法看到索引,它们只能被 ...

  4. 使用doxmate生成文档

    主页:http://html5ify.com/doxmate/ 在windows下面使用doxmate 1. 下载node.js(msi)并安装 http://www.nodejs.org/downl ...

  5. (二)Python 学习第二天--爬5068动漫图库小案例

    (注:代码和网站仅仅是学习用途,非营利行为,源代码参考网上大神代码,仅仅用来学习

  6. .mm c++ oc 混编

    When you create a static library you don't link in the dependent libraries. As a result, when you re ...

  7. Python 之列表操作

    # len(list)列表元素个数 # max(list)返回列表元素最大值 # min(list)返回列表元素最小值 # list(seq)将元组转换为列表 # list.append(obj)在列 ...

  8. CAD动态绘制带面积周长的圆(com接口)

    CAD绘制图像的过程中,画圆的情况是非常常见的,用户可以在控件视区点取任意一点做为圆心,再动态点取半径绘制圆. 主要用到函数说明: _DMxDrawX::DrawCircle 绘制一个圆.详细说明如下 ...

  9. 2 Button

    // <summary> /// 设置透明按钮样式 /// </summary> private void SetBtnStyle(Button btn) { btn.Flat ...

  10. yum更换国内源及yum下载rpm包

    一.yum更换国内源 运维开发技术交流群欢迎大家加入一起学习(QQ:722381733) 1.前往yum文件路径地址 [root@web1 ~]# cd /etc/yum.repos.d/ [root ...