题意:

给出n*m的矩阵求最大子矩阵和,要求必须把矩阵中的某一个元素替换成p

代码:

//求最大子矩阵和,容易想到压缩之后dp但是这道题要求必须替换一次p,必然优先替换最小的。
//这样如果求得的结果恰好等于这个矩阵所有的元素的
//和但不是整个矩阵,并且没有替换元素结果就不对了,需要特判一下这种情况。比如以下两组数据:
//2 2 -4 2 2 -4
//1 -1 1 1
//1 1 1 1 dp求出来的结果分别是2和4并且没有替换p。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int INF=0x3f3f3f3f;
int mp[][],b[],c[],f[][];
int n,m,p,ans;
void dp()
{
memset(f,,sizeof(f));
for(int i=;i<=m;i++){
f[i][]=max(f[i-][],)+b[i];
f[i][]=max(f[i-][]+b[i],f[i][]-c[i]+p);
ans=max(ans,max(f[i][],f[i][]));
}
}
void solve()
{
for(int i=;i<=m;i++){
int sum=,min_a=INF;
for(int j=i;j<=m;j++){
sum+=b[j];
min_a=min(min_a,c[j]);
if(i==&&j==m) ans=max(ans,sum-min_a+p);
else ans=max(ans,max(sum,sum-min_a+p));
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d%d",&n,&m,&p)==){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++)
scanf("%d",&mp[i][j]);
}
ans=-INF;
for(int i=;i<=n;i++){
memset(b,,sizeof(b));
memset(c,INF,sizeof(c));
for(int j=i;j<=n;j++){
for(int k=;k<=m;k++){
b[k]+=mp[j][k];
c[k]=min(c[k],mp[j][k]);
}
if(i==&&j==n) solve();
else dp();
}
}
printf("%d\n",ans);
}
return ;
}

hihocoder 1580 dp最大子矩阵和的更多相关文章

  1. hihocoder #1580 : Matrix (DP)

    #1580 : Matrix 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Once upon a time, there was a little dog YK. On ...

  2. dp - 最大子矩阵和 - HDU 1081 To The Max

    To The Max Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=1081 Mean: 求N*N数字矩阵的最大子矩阵和. ana ...

  3. ZOJ 1074 To the Max(DP 最大子矩阵和)

    To the Max Time Limit: 2 Seconds      Memory Limit: 65536 KB Problem Given a two-dimensional array o ...

  4. hdu---1506(Largest Rectangle in a Histogram/dp最大子矩阵)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  5. HDU——PKU题目分类

    HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...

  6. [转] HDU 题目分类

    转载来自:http://www.cppblog.com/acronix/archive/2010/09/24/127536.aspx 分类一: 基础题:1000.1001.1004.1005.1008 ...

  7. HDOJ的题目分类

    模拟题, 枚举 1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 10 ...

  8. HDU ACM 题目分类

    模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 104 ...

  9. hdoj分类

    http://blog.csdn.net/lyy289065406/article/details/6642573 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 ...

随机推荐

  1. 基于腾讯云CLB实现K8S v1.10.1集群高可用+负载均衡

    概述: 最近对K8S非常感兴趣,同时对容器的管理等方面非常出色,是一款非常开源,强大的容器管理方案,最后经过1个月的本地实验,最终决定在腾讯云平台搭建属于我们的K8S集群管理平台~ 采购之后已经在本地 ...

  2. openstack golang sdk使用

    1. go get github.com/gophercloud/gophercloud import ( "github.com/gophercloud/gophercloud" ...

  3. shell基础 -- 入门篇

    shell 英文含义是“壳”,这是相对于内核来说的,shell 也确实就像是内核的壳,通常来说,所有对内核的访问都要经由 shell .同时,shell 还是一门功能强大的编程语言.shell 是 L ...

  4. hadoop Datanode Uuid unassigned

    在配置hadoop的hdfs的时候,要首先格式化,然后才能启动,但是格式化的方式有的是不对出现Initialization failed for Block pool <registering& ...

  5. javascript event对象操作

    js代码: $(".leads_detail").click(function(e){ e = e || event; var t = e.target || e.srcEleme ...

  6. Sorting a Three-Valued Sequence(三值排序)

    Description 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候. 在这个任务中可能的值只有三种1,2和3.我们用交换的 ...

  7. tomcat开发环境配置

    1.环境配置教程 环境变量.安装版.配置版 2.编写启动tomcat的批处理文件 3.改变端口 4.虚拟目录

  8. Alpha 冲刺(9/10)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 多次测试软件运行 学习OPENMP ...

  9. Ubuntu中Google Chrome安装

    转载自博客 1. 方法一   1.在ubuntu中启动终端   2.在终端中,输入以下命令: sudo wget http://www.linuxidc.com/files/repo/google-c ...

  10. 1106C程序语法树