hihocoder1634 Puzzle Game
题目链接:(vjudge) 戳我
和上面那个matrix 比较像。
大概题意就是给你一个n*m的矩阵,然后可以选择其中一个数字进行修改(当然也可以不修改),使得矩阵的最大子矩阵尽可能小。最后输出这个值。
我们\(n^2\)遍历i,j,对于一个位置\([i,j]\)看看如果对它进行更改结果会如何。显然如果p值大于该节点的数,我们可以选择不更改。
我们考虑修改了位置为i,j的一个数后,剩下的最大子矩阵会有什么情况?
这里进行分类讨论,第一类是不选择这个数字了。之后最大子矩阵就有“在它左边”,“在它右边”,“在它上面”,“在它下面”四种情况了。而这四种情况对应的最大子矩阵和显然我们可以通过预处理计算出来。
第二类是仍然选择这个数字,这个比较简单,直接对原来矩阵的最大子矩阵和进行更改即可。
代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdio>
#define MAXN 310
using namespace std;
int n,m,p,ans,ansans,all;
int a[MAXN][MAXN],up[MAXN],down[MAXN],ll[MAXN],rr[MAXN],sum[MAXN],dp[MAXN];
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
while(scanf("%d%d%d",&n,&m,&p)!=EOF)
{
memset(a,0,sizeof(a));
for(int i=0;i<=300;i++)
ll[i]=rr[i]=up[i]=down[i]=-0x3f3f3f3f;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
memset(dp,0,sizeof(dp));
for(int l=1;l<=n;l++)
{
memset(sum,0,sizeof(sum));
for(int r=l;r<=n;r++)
{
int cur_ans=-0x3f3f3f3f;
for(int i=1;i<=m;i++)
{
if(l==r) sum[i]=a[r][i];
else sum[i]+=a[r][i];
dp[i]=max(dp[i-1]+sum[i],sum[i]);
cur_ans=max(dp[i],cur_ans);
}
for(int i=r;i<=n;i++) up[i]=max(up[i],cur_ans);
for(int i=1;i<=l;i++) down[i]=max(down[i],cur_ans);
}
}
memset(dp,0,sizeof(dp));
for(int l=1;l<=m;l++)
{
memset(sum,0,sizeof(sum));
for(int r=l;r<=m;r++)
{
int cur_ans=-0x3f3f3f3f;
for(int i=1;i<=n;i++)
{
if(l==r) sum[i]=a[i][r];
else sum[i]+=a[i][r];
dp[i]=max(dp[i-1]+sum[i],sum[i]);
cur_ans=max(cur_ans,dp[i]);
}
for(int i=r;i<=m;i++) ll[i]=max(ll[i],cur_ans);
for(int i=1;i<=l;i++) rr[i]=max(rr[i],cur_ans);
}
}
//for(int i=1;i<=n;i++)printf("i=%d ll=%d rr=%d up=%d down=%d\n",i,ll[i],rr[i],up[i],down[i]);
ansans=up[n];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]<p) continue;
ans=-0x3f3f3f3f;
ans=max(ans,max(max(up[i-1],down[i+1]),max(ll[j-1],rr[j+1])));
ans=max(ans,down[1]-a[i][j]+p);
ansans=min(ansans,ans);
}
}
printf("%d\n",ansans);
}
}
hihocoder1634 Puzzle Game的更多相关文章
- 【Hihocoder1634】Puzzle Game(DP)
题意:有一个n*m的矩阵,每个矩阵里有一个数字a[i][j].现在要求将其中一个格子的值改为p,使得修改后矩阵的最大子矩阵和最小,求这个最小值 n,m<=150,abs(a[i][j])< ...
- Puzzle 面向服务/切面(AOP/IOC)开发框架 For .Net
Puzzle 面向服务/切面AOP开发框架 For .Net AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效 ...
- HDU5456 Matches Puzzle Game(DP)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5456 Description As an exciting puzzle game for ...
- one recursive approach for 3, hdu 1016 (with an improved version) , permutations, N-Queens puzzle 分类: hdoj 2015-07-19 16:49 86人阅读 评论(0) 收藏
one recursive approach to solve hdu 1016, list all permutations, solve N-Queens puzzle. reference: t ...
- poj3678 Katu Puzzle 2-SAT
Katu Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6714 Accepted: 2472 Descr ...
- POJ1651Multiplication Puzzle[区间DP]
Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8737 Accepted: ...
- codeforce B Island Puzzle
B. Island Puzzle time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- poj 1651 Multiplication Puzzle (区间dp)
题目链接:http://poj.org/problem?id=1651 Description The multiplication puzzle is played with a row of ca ...
- Ignatius's puzzle
Ignatius's puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
随机推荐
- Mybatis 针对ORACLE和MYSQL的批量插入与多参数批量删除
今天利用Mybatis的<for each>标签做oracle的批量插入数据时,发现和MySQL数据库有区别.在此记录下,以防之后再踩坑. 一.批量插入: 1.controller: /* ...
- jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 在tomcat5下jsp中出现此错误一般都是在js ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周
java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...
- Android中自定义ListView实现上拉加载更多和下拉刷新
ListView是Android中一个功能强大而且很常用的控件,在很多App中都有ListView的下拉刷新数据和上拉加载更多这个功能.这里我就简单记录一下实现过程. 实现这个功能的方法不止一个,Gi ...
- 使用jQuery解析JSON数据-已验证
本文来源于:http://www.cnblogs.com/codeplus/archive/2011/07/18/2109544.html 上例中得到的JSON数据如下,是一个嵌套JSON: {&qu ...
- TP3.1 一对多模型关联
TP3.1.3 的一对多的模型关联 老需求 --- 一个用户多个文章,查看这些文章 HasMany 首先定义Model 模型名字叫UserMode.class.php class UserMode ...
- vim全局替换命令-乾颐堂
语法为 :[addr]s/源字符串/目的字符串/[option] 全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. 如:“1,20” :表示从第1行到2 ...
- [Token] 从index.jsp中获取Token
import com.eviware.soapui.support.GroovyUtils def groovyUtils = new GroovyUtils( context ) def holde ...
- Greeplum 系列(三) 基本用法
Greeplum 系列(三) 基本用法 <PostgreSQL 教程>:https://www.yiibai.com/postgresql 一.Greeplum 登陆与创建 1.1 登陆 ...
- linux下安装或升级GCC4.8.2,以支持C++11标准[转]
在编译kenlm的时候需要安装gcc, 然后还需要安装g++. g++安装命令:sudo apt-get install g++ ----------------------以下为网上转载内容,加上自 ...