Puzzle Game HihoCoder - 1634
题目链接:https://cn.vjudge.net/problem/HihoCoder-1634
题目意思:可以让矩阵里的某一个数变成p,或者不修改。求最大子矩阵最小,输出最小值。
思路:请看下图

代码:
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
#include <math.h>
using namespace std;
typedef long long int LL;
int max(int a,int b,int c,int d)
{
return max(max(a,b),max(c,d));
}
const int maxn=155;
const int INF=2e9+1e8;
int n,m,p;
int a[maxn][maxn],dp[maxn][maxn],ma[maxn][maxn],L[maxn],R[maxn],U[maxn],D[maxn];
void init()
{
memset(L, 0x88, sizeof(L));
memset(R, 0x88, sizeof(R));
memset(U, 0x88, sizeof(U));
memset(D, 0x88, sizeof(D));
}
void deal()
{
int tmp;
// xia
memset(dp, 0, sizeof(dp));
memset(ma, 0x88, sizeof(ma));
tmp = -INF;
for (int i = 1; i <= n; i++)
{
for (int l = 1; l <= m; l++)
{
int 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;
}
// zuo
memset(dp, 0, sizeof(dp));
memset(ma, 0x88, sizeof(ma));
tmp = -INF;
for (int i = m; i>0; i--)
{
for (int l = 1; l <= n; l++)
{
int sum = 0;
for (int r = l; r <= n; r++)
{
sum += a[r][i];
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]);
}
}
L[i] = tmp;
}
// shang
memset(dp, 0, sizeof(dp));
memset(ma, 0x88, sizeof(ma));
tmp = -INF;
for (int i = n; i>0; i--)
{
for (int l = 1; l <= m; l++)
{
int 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;
}
// you
memset(dp, 0, sizeof(dp));
memset(ma, 0x88, sizeof(ma));
tmp = -INF;
for (int i = 1; i <= m; i++)
{
for (int l = 1; l <= n; l++)
{
int sum = 0;
for (int r = l; r <= n; r++)
{
sum += a[r][i];
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]);
}
}
R[i] = tmp;
}
}
int main()
{
while(scanf("%d%d%d",&n,&m,&p)+1)
{
init();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
}
deal();
int ans=D[n];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int tmp=max(D[i-1],U[i+1],L[j+1],R[j-1]);
tmp=max(tmp,D[n]-a[i][j]+p);
ans=min(ans,tmp);
}
}
printf("%d\n",ans);
}
return 0;
}
/*
3 3 -10
-100 4 4
4 -10 4
4 4 1
3 3 -1
-2 -2 -2
-2 -2 -2
-2 -2 -2
*/
Puzzle Game HihoCoder - 1634的更多相关文章
- HihoCoder 1634 Puzzle Game(最大子矩阵和)题解
题意:给一个n*m的矩阵,你只能选择一个格子把这个格子的数换成p(也可以一个都不换),问最大子矩阵和最小可能是多少? 思路: 思路就是上面这个思路,这里简单讲一下怎么n^3求最大子矩阵和:枚举两行(或 ...
- Hihocoder 1634 Puzzle Game(2017 ACM-ICPC 北京区域赛 H题,枚举 + 最大子矩阵变形)
题目链接 2017 Beijing Problem H 题意 给定一个$n * m$的矩阵,现在可以把矩阵中的任意一个数换成$p$,求替换之后最大子矩阵的最小值. 首先想一想暴力的方法,枚举矩阵中 ...
- hihoCoder 1426 : What a Ridiculous Election(总统夶选)
hihoCoder #1426 : What a Ridiculous Election(总统夶选) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - ...
- 2015北京网络赛 J Clarke and puzzle 求五维偏序 分块+bitset
Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc20 ...
- hihocoder -1121-二分图的判定
hihocoder -1121-二分图的判定 1121 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Net ...
- Hihocoder 太阁最新面经算法竞赛18
Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...
- hihoCoder太阁最新面经算法竞赛15
hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...
- 【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II
http://hihocoder.com/problemset/problem/1454 调了好长时间,谜之WA... 等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻ #include& ...
- Puzzle 面向服务/切面(AOP/IOC)开发框架 For .Net
Puzzle 面向服务/切面AOP开发框架 For .Net AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效 ...
随机推荐
- 005-环境安装【docker、fabric】
1.参考地址:https://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html#install-curl 一.前置条件和系统配置 1.安 ...
- 用仿ActionScript的语法来编写html5——第四篇,继承与简单的rpg
第四篇,继承与简单的rpg 这次用继承自LSprite的类来实现简单的rpg的demo先看一下最后的代码与as的相似度 var backLayer; //地图 var mapimg; //人物 var ...
- python安装virtualenv
pip install virtualenv 为了使用更方便用,安装另外一个,windows下要-win,linux下不用 pip install virtualenvwrapper-win 使用方法 ...
- Cpython支持的进程与线程(Day33)
一.multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分情况使用多进程.python中提供了非常好的多进程包multiprocessing. mul ...
- 本地连不上远程mysql数据库(1)
Ubuntu 16.04下开启Mysql 3306端口远程访问 0. 前言 网上看到很多开启Mysql远程访问端口,修改的配置文件我都没有找到. 特意查看了我的Linux版本 $ sudo lsb ...
- directorjs和requirejs和artTemplate模板引擒建立的SPA框架
分为4块:A : index.html壳子. 加载B init-config.js, 加载D header.html模板B : init-config.js 个人信息+路由配置+权限+渲 ...
- HihoCoder - 1339 Dice Possibility(概率dp)
题意:求用N(1<=N<=100)个骰子掷出M(1<=M<=600)的概率 分析:直接求概率可能出现6^100次方,会爆精度.可以用一个数组dp[i][j]记录用i个骰子掷出j ...
- JAVA中字符串问题
JAVA中对象创建 通过new关键字来创建对象 通过newInstance()方法来创建对象 使用反序列化机制中IO流中恢复Java对象 通过clone()方法复制一个对象 直接量方式,String ...
- ASP.NET MVC 处理404与500错误页面的方法
第一步创建ErrorPageController 第二步添加Oops页面 @{ ViewBag.Title = "Oops"; Layout = "~/Areas/Adm ...
- 基于jQuery和Bootstrap的手风琴垂直菜单
在线演示 本地下载