hihocoder 1580 dp最大子矩阵和
题意:
给出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最大子矩阵和的更多相关文章
- hihocoder #1580 : Matrix (DP)
#1580 : Matrix 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Once upon a time, there was a little dog YK. On ...
- 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 ...
- ZOJ 1074 To the Max(DP 最大子矩阵和)
To the Max Time Limit: 2 Seconds Memory Limit: 65536 KB Problem Given a two-dimensional array o ...
- hdu---1506(Largest Rectangle in a Histogram/dp最大子矩阵)
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- HDU——PKU题目分类
HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...
- [转] HDU 题目分类
转载来自:http://www.cppblog.com/acronix/archive/2010/09/24/127536.aspx 分类一: 基础题:1000.1001.1004.1005.1008 ...
- HDOJ的题目分类
模拟题, 枚举 1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 10 ...
- HDU ACM 题目分类
模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 104 ...
- hdoj分类
http://blog.csdn.net/lyy289065406/article/details/6642573 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 ...
随机推荐
- Pearson Distance
Pearson Distance: where: 1. is the covariance 2. is the standard deviation of 3. is the standard ...
- Nginx连载
一. nginx变量(用户变量.内建变量) 用户变量 又称用户自定义变量 Nginx用户变量的可见范围是整个配置文件,甚至可以跨越不通虚拟主机的server配置,但是变量适用范围是不可以跨越自己的容器 ...
- Python中import的as语法
在Python中,如果import的语句比较长,导致后续引用不方便,可以使用as语法,比如: import dir1.dir2.mod # 那么,后续对mod的引用,都必须是dir1.dir2.mod ...
- 1019psp
1.本周psp: 2.本周进度条: 3.累计进度图(折线图): 4.psp饼状图:
- python 二维矩阵及转byte知识点
1.注意python中的数组和list形式混合: 数组在numpy里面: 2.二维数组这样定义可以修改固定位置的值: rawDataArray_temp = [([0]*nIRImageWidth)f ...
- rfid工作原理
RFID的工作原理是:标签进入磁场后,如果接收到阅读器发出的特殊射频信号,就能凭借感应电流所获得的能量发送出存储在芯片中的产品信息(即Passive Tag,无源标签或被动标签),或者主动发送某一频率 ...
- 【Leetcode】113Path Sum II
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- MySQL 事务 转自菜鸟教程 讲的清晰
MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数 ...
- inline函数的总结
在函数返回类型前加上关键字inline就可以将函数指定为内联函数: inline const string& shortString(const string &s1, const s ...
- 第193天:js---Math+Error+Number+Object总结
一.Math 随机选取 //随机选取 function getRandom (begin,end){ return Math.floor(Math.random()*(end-begin))+begi ...