题目链接

题意:在n*m的矩阵中选择变换或者不变换一个数变成p,使得最大子矩阵和最小

1<=n,m<=150, -1000<=p<=1000;

题解:



他人题解链接

涉及到知识点求最大矩阵和 :

    memset(ma,0x88,sizeof(ma));
memset(dp,0,sizeof(dp));
ans=-inf;
for(int i=1;i<=n;i++)
{
for(int l=1;l<=m;l++)
{
sum=0;
for(int r=l;r<=m;r++)
{
sum+=a[i][r];
dp[l][r]+=sum;
ma[l][r]=max(ma[l][r],dp[l][r]);
if(dp[l][r]<0)
dp[l][r]=0;
ans=max(ans,ma[l][r]);
}
}
}

往四个方向dp

#include<bits/stdc++.h>
using namespace std;
const int inf = 2e9+1e8;
const int N = 160;
int a[N][N];
int L[N],R[N],U[N],D[N],dp[N][N];
int ma[N][N];
int max4(int a,int b,int c,int d)
{
return max(max(a,b),max(c,d));
}
int n,m,p;
void solve()
{
int sum=0,tmp;
memset(ma,0x88,sizeof(ma));
memset(dp,0,sizeof(dp));
tmp=-inf;
for(int i=1;i<=n;i++)
{
for(int l=1;l<=m;l++)
{
sum=0;
for(int r=l;r<=m;r++)
{
sum+=a[i][r];
dp[l][r]+=sum;ma[l][r]=max(ma[l][r],dp[l][r]);
if(dp[l][r]<0)
{
dp[l][r]=0;
} tmp=max(tmp,ma[l][r]);
}
}
U[i]=tmp;
} memset(ma,0x88,sizeof(ma));
memset(dp,0,sizeof(dp));
tmp=-inf;
for(int i=n;i>=1;i--)
{
for(int l=1;l<=m;l++)
{
sum=0;
for(int r=l;r<=m;r++)
{
sum+=a[i][r];
dp[l][r]+=sum;ma[l][r]=max(ma[l][r],dp[l][r]);
if(dp[l][r]<0)
{
dp[l][r]=0;
} tmp=max(tmp,ma[l][r]);
}
}
D[i]=tmp;
} memset(ma,0x88,sizeof(ma));
memset(dp,0,sizeof(dp));
tmp=-inf;
for(int i=m;i>=1;i--)
{
for(int s=1;s<=n;s++)
{
sum=0;
for(int x=s;x<=n;x++)
{
sum+=a[x][i];
dp[s][x]+=sum;ma[s][x]=max(ma[s][x],dp[s][x]);
if(dp[s][x]<0)
{
dp[s][x]=0;
} tmp=max(tmp,ma[s][x]);
}
}
R[i]=tmp;
} memset(ma,0x88,sizeof(ma));
memset(dp,0,sizeof(dp));
tmp=-inf;
for(int i=1;i<=m;i++)
{
for(int s=1;s<=n;s++)
{
sum=0;
for(int x=s;x<=n;x++)
{
sum+=a[x][i];
dp[s][x]+=sum;ma[s][x]=max(ma[s][x],dp[s][x]);
if(dp[s][x]<0)
{
dp[s][x]=0;
} tmp=max(tmp,ma[s][x]);
}
}
L[i]=tmp;
}
} int main()
{
// int n,m,p;
while(scanf("%d%d%d",&n,&m,&p)!=EOF)
{
memset(L,0x88,sizeof(L));
memset(R,0x88,sizeof(R));
memset(D,0x88,sizeof(D));
memset(U,0x88,sizeof(U));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
solve();
int ans=D[1];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]<=p) continue;
int tmp=max4(L[j-1],R[j+1],U[i-1],D[i+1]);
tmp=max(tmp,D[1]-a[i][j]+p);
ans=min(ans,tmp);
}
}
printf("%d\n",ans);
}
return 0;
}

体会:巧妙利用预处理的方法降低复杂度,用空间去换时间,不要被模板给限制住思维。。。。比赛中一直用模板,使得思维变得僵硬

2017北京赛区H题的更多相关文章

  1. 2017北京赛区J题

    类型:三维动态规划 题目链接 题意: 合并连续石头块,最终要合并成一块,求时间最短,每次只能连续合并L~R块石头,不能合并成一块时输出-1 题解: 利用动态规划解决两种分问题 dp[l][r][k]: ...

  2. 2017北京国庆刷题Day1 afternoon

    期望得分:100+100+100=300 实际得分:100+100+100=300 T1 一道图论好题(graph) Time Limit:1000ms   Memory Limit:128MB 题目 ...

  3. XTU 1267 - Highway - [树的直径][2017湘潭邀请赛H题(江苏省赛)]

    这道题可能有毒……总之一会儿能过一会儿不能过的,搞的我很心烦…… 依然是上次2017江苏省赛的题目,之前期末考试结束了之后有想补一下这道题,当时比较懵逼不知道怎么做……看了题解也不是很懂……就只好放弃 ...

  4. 2017北京国庆刷题Day5 afternoon

    期望得分:100+60+100=260 实际得分:0+60+40=100 设图中有m个环,每个环有si条边,有k条边不在环中 ans= (2^s1 -2)*( 2^s2 -2)* (2^s3 -2)… ...

  5. 2017北京国庆刷题Day3 morning

    期望得分:100+60+0=160 实际得分:100+30+0=130 考场上用的哈希 #include<cstdio> #include<cstring> #include& ...

  6. HDU 6271 Master of Connected Component(2017 CCPC 杭州 H题,树分块 + 并查集的撤销)

    题目链接  2017 CCPC Hangzhou Problem H 思路:对树进行分块.把第一棵树分成$\sqrt{n}$块,第二棵树也分成$\sqrt{n}$块.    分块的时候满足每个块是一个 ...

  7. 2017北京国庆刷题Day4 morning

    期望得分:0+40+30=70 实际得分:0+10+10=20 题目修改:只能由0变1,只能用一次操作 大模拟 #include<cstdio> #include<cstring&g ...

  8. 2017湘潭大学邀请赛H题(树的直径)

    链接:https://www.icpc.camp/contests/4mYguiUR8k0GKE H. Highway The input contains zero or more test cas ...

  9. 2017北京国庆刷题Day7 morning

    期望得分:100+0+100=200 实际得分:100+20+0=120 离散化搞搞 #include<cstdio> #include<iostream> #include& ...

随机推荐

  1. Http:UTF-8与GB2312之间的关系

    UTF-8里包括GB2312.UTF-8是国际通用的标准(包括世界所有的语言),而GB2312(只是简体中文)只适合做中文的网站.假设你想做个中文网页,但是还可以翻成英文的话,就得用UTF-8.如果用 ...

  2. thrift使用上面的一些坑

    https://blog.csdn.net/andylau00j/article/details/53912485

  3. 临时变量不能作为非const引用

    转自:http://blog.csdn.net/u011068702/article/details/64443949 1.看代码 2.编译结果 3.分析和解决 就拿f(a + b)来说,a+b的值会 ...

  4. Spring事务管理之几种方式实现事务

    1.事务认识 大家所了解的事务Transaction,它是一些列严密操作动作,要么都操作完成,要么都回滚撤销.Spring事务管理基于底层数据库本身的事务处理机制.数据库事务的基础,是掌握Spring ...

  5. poj 2187:Beauty Contest(旋转卡壳)

    Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 32708   Accepted: 10156 Description Bes ...

  6. 树梅派配置ad-hoc网络

    树梅派配置ad-hoc网络 更新与安装 1.更改源/etc/apt/source.list: http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian ...

  7. Linux 下部署Django项目

    Linux 下部署Django项目   说明:本文所使用的环境为CentOS 6+Python2.7+Django1.11 安装Django.Nginx和uWSGI 1.确定已经安装了2.7版本的Py ...

  8. Azure Active Directory配置java应用的单点登录

    下载应用:https://github.com/Azure-Samples/active-directory-java-webapp-openidconnect(普通项目,集成了特殊配置接入微软的注册 ...

  9. c# iText 生成PDF 有文字,图片,表格,文字样式,对齐方式,页眉页脚,等等等,

    #region 下载说明书PDF protected void lbtnDownPDF_Click(object sender, EventArgs e) { int pid = ConvertHel ...

  10. 【网络结构】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文解析

    目录 0. Paper link 1. Overview 2. Depthwise Separable Convolution 2.1 architecture 2.2 computational c ...