2017北京赛区H题
题目链接
题意:在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题的更多相关文章
- 2017北京赛区J题
类型:三维动态规划 题目链接 题意: 合并连续石头块,最终要合并成一块,求时间最短,每次只能连续合并L~R块石头,不能合并成一块时输出-1 题解: 利用动态规划解决两种分问题 dp[l][r][k]: ...
- 2017北京国庆刷题Day1 afternoon
期望得分:100+100+100=300 实际得分:100+100+100=300 T1 一道图论好题(graph) Time Limit:1000ms Memory Limit:128MB 题目 ...
- XTU 1267 - Highway - [树的直径][2017湘潭邀请赛H题(江苏省赛)]
这道题可能有毒……总之一会儿能过一会儿不能过的,搞的我很心烦…… 依然是上次2017江苏省赛的题目,之前期末考试结束了之后有想补一下这道题,当时比较懵逼不知道怎么做……看了题解也不是很懂……就只好放弃 ...
- 2017北京国庆刷题Day5 afternoon
期望得分:100+60+100=260 实际得分:0+60+40=100 设图中有m个环,每个环有si条边,有k条边不在环中 ans= (2^s1 -2)*( 2^s2 -2)* (2^s3 -2)… ...
- 2017北京国庆刷题Day3 morning
期望得分:100+60+0=160 实际得分:100+30+0=130 考场上用的哈希 #include<cstdio> #include<cstring> #include& ...
- HDU 6271 Master of Connected Component(2017 CCPC 杭州 H题,树分块 + 并查集的撤销)
题目链接 2017 CCPC Hangzhou Problem H 思路:对树进行分块.把第一棵树分成$\sqrt{n}$块,第二棵树也分成$\sqrt{n}$块. 分块的时候满足每个块是一个 ...
- 2017北京国庆刷题Day4 morning
期望得分:0+40+30=70 实际得分:0+10+10=20 题目修改:只能由0变1,只能用一次操作 大模拟 #include<cstdio> #include<cstring&g ...
- 2017湘潭大学邀请赛H题(树的直径)
链接:https://www.icpc.camp/contests/4mYguiUR8k0GKE H. Highway The input contains zero or more test cas ...
- 2017北京国庆刷题Day7 morning
期望得分:100+0+100=200 实际得分:100+20+0=120 离散化搞搞 #include<cstdio> #include<iostream> #include& ...
随机推荐
- eclipse中Web Deployment Assembly与build path作用
java Build path是编译路径设置,主要用来设置源代码的编译路径默认是default output folder Web Deployment Assembly是eclipse中的发布路径设 ...
- [pixhawk笔记]7-MAVLink添加自定义消息
前一篇学习了uORB,用于px4中各个模块的进程间通信,下来学习MAVLink,用于飞控和地面站之间的通信.教程中主要给出了使用MAVLink的发送和接收消息的方法.完整的MAVLink消息列表见该网 ...
- 20145312 《Java程序设计》第四周学习总结
20145312 <Java程序设计>第四周学习总结 学习笔记 Chapter 6 6.1何为继承 1.定义:面向对象中子类继承父类,避免重复的行为定义. 6.1.1 继承共同行为 1.以 ...
- windows 下获取父进程pid
DWORD GetParentProcessID(DWORD dwProcessId) { LONG status; DWORD dwParentPID = (DWORD)-1; HANDLE hPr ...
- Jenkins 集成Ansible教程
前提条件: 1. 部署Jenkins Server 2. 部署 Ansible Server 一.在Jenkins安装SSH插件 系统管理 -> 插件管理 二.在Jenkins 凭证中添加Ans ...
- fatal: refusing to merge unrelated histories的解决方案
最近更新了git版本,发现在github上建立了一个仓库,然后关联本地库的时候pull失败,错误为fatal: refusing to merge unrelated histories,查找后找到了 ...
- Fatal error compiling: java.lang.NoSuc hFieldError??
用了两天时间,试了各种方法,问题最终解决.是JDK的版本问题:Maven3.5不支持jdk-9.0.1,最后退回:jdk1.8.0_151,问题圆满解决!! [ERROR] Failed to exe ...
- nfs报错 - No route to host
nfs报错 - No route to host ______________________________ 因为防火墙阻止的原因. 解决方法:服务器rhel7系统下,打开firewall-conf ...
- mybatis的一级缓存和二级缓存(1)
1.mybatis一级缓存,sqlSesion级别的缓存,一级缓存默认一直开启的,sqlSession级别的一个Map,把查询的数据放到一个Map中,以后需要相同的数据,直接从Map中去取 与数据库一 ...
- 如何优雅的进入IT世界
原始地址:http://www.cocoachina.com/gamedev/misc/2014/0613/8808.html 以下三段是废话,请跳过. (废话段1)有文科生想了解IT世界.这并不 ...