BZOJ1127 POI2008KUP(悬线法)
首先显然地,如果某个格子的权值超过2k,其一定不在答案之中;如果在[k,2k]中,其自身就可以作为答案。那么现在我们只需要考虑所选权值都小于k的情况。
可以发现一个结论:若存在一个权值都小于k的矩阵其权值和>=k,那么该矩阵一定存在权值和在[k,2k]中的子矩阵。
找到该子矩阵的过程和证明的过程是一样的:若其权值和已经在[k,2k]内,直接选择该矩阵即可;否则考虑从该矩阵中去掉一行(或一列)。如果矩阵剩下的部分权值和:
(1)在[0,k)内,对去掉的该行(或列)继续执行该操作
(2)在[k,2k]内,已找到答案
(3)在(2k,+∞)内,对剩下的矩阵继续执行该操作
由于矩阵中每一个权值都小于k,权值和不可能从>2k直接跳到<k,最终一定能找到合法矩阵。
于是只需要找到一个>=k的矩阵。悬线法即可。即先计算出每个位置向上向左向右最远能拓展到哪,然后根据其上方的点递推计算该悬线向左右拓展的最远位置。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 2010
int n,k,low,high,a[N][N],l[N][N],r[N][N],up[N][N];
int L,R,U,D;
long long s[N][N];
long long sum(int l,int r,int u,int d)
{
return s[d][r]-s[d][l-]-s[u-][r]+s[u-][l-];
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj1127.in","r",stdin);
freopen("bzoj1127.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
k=read(),n=read();
low=k,high=k<<;
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
{
s[i][j]=s[i-][j]+s[i][j-]-s[i-][j-]+(a[i][j]=read());
if (a[i][j]>=low&&a[i][j]<=high) {cout<<j<<' '<<i<<' '<<j<<' '<<i;return ;}
}
for (int i=;i<=n;i++)
{
for (int j=;j<=n;j++)
if (a[i][j]<low) up[i][j]=up[i-][j]+,l[i][j]=l[i][j-]+;
for (int j=n;j>=;j--)
if (a[i][j]<low) r[i][j]=r[i][j+]+;
for (int j=;j<=n;j++)
if (up[i][j]>) l[i][j]=min(l[i][j],l[i-][j]);
for (int j=n;j>=;j--)
if (up[i][j]>) r[i][j]=min(r[i][j],r[i-][j]);
}
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
if (a[i][j]<low&&sum(j-l[i][j]+,j+r[i][j]-,i-up[i][j]+,i)>=low)
{
L=j-l[i][j]+,R=j+r[i][j]-,U=i-up[i][j]+,D=i;
break;
}
if (!L) cout<<"NIE";
else
{
while (sum(L,R,U,D)>high)
{
if (D>U)
{
if (sum(L,R,U,D-)<low) U=D;
else D--;
}
else R--;
}
cout<<L<<' '<<U<<' '<<R<<' '<<D;
}
return ;
}
BZOJ1127 POI2008KUP(悬线法)的更多相关文章
- 【BZOJ-1127】KUP 悬线法 + 贪心
1127: [POI2008]KUP Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 317 Solved: 11 ...
- 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 753 Solved: 444[Submit][Status][Discuss] D ...
- BZOJ_3039_玉蟾宫_(动态规划+悬线法)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3039 n*m的矩阵由R和F组成,求全是F的子矩阵的大小的三倍. 分析 悬线法: 浅谈用极大化思 ...
- BZOJ 1057: [ZJOI2007]棋盘制作( dp + 悬线法 )
对于第一问, 简单的dp. f(i, j)表示以(i, j)为左上角的最大正方形, f(i, j) = min( f(i + 1, j), f(i, j + 1), f(i + 1, j + 1)) ...
- BZOJ 3039: 玉蟾宫( 悬线法 )
最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...
- [POJ1964]City Game (悬线法)
题意 其实就是BZOJ3039 不过没权限号(粗鄙之语) 同时也是洛谷4147 就是求最大子矩阵然后*3 思路 悬线法 有个博客讲的不错https://blog.csdn.net/u012288458 ...
- [P1169] 棋盘制作 &悬线法学习笔记
学习笔记 悬线法 最大子矩阵问题: 在一个给定的矩形中有一些障碍点,找出内部不包含障碍点的,边与整个矩形平行或重合的最大子矩形. 极大子矩型:无法再向外拓展的有效子矩形 最大子矩型:最大的一个有效子矩 ...
- P1169 [ZJOI2007]棋盘制作 DP悬线法
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8 \times 88×8大小的黑白相间的方阵,对应八八六十四卦,黑白 ...
- P4147 玉蟾宫 二维DP 悬线法
题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...
随机推荐
- Lauterbach TRACE32技巧小集
1. TRACE32中实现类container_of功能 假设现在我只知道一个全局变量成员tv2的地址,类型是tvec_base.我想知道这个全局变量的地址怎么办? struct tvec_base ...
- 微信小程序 wx.getUserInfo 解密 C# 代码 - 转
public static string DecodeUserInfo(string raw, string signature,string encryptedData, string iv) { ...
- 反射反射,程序员的快乐+反射案例:打印和Excel导出
还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 看过设计模式的童鞋都知道:反射反射,程序员的快乐!今天我们就利用反射来制作打印 ...
- dotnetcore/CAP
CAP带你轻松玩转Asp.Net Core消息队列 CAP是什么? CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community中的第一个千星项目(目前 ...
- Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页及获取JS返回值
前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但是网页的DOM元素内容却可以动态的变化.如果处理这种网页是还用requests库或者 ...
- 学习ML.NET(3): 导入数据集
机器学习算法需要作用于数据,用来训练算法模型.数据集通常是以纯文本文件存储的表格数据,文件的每一行是一条数据记录,每条记录由多列组成,列之间用分隔符(一般是逗号,)分开,例如前面用到过的鸢尾花数据集. ...
- Python常见字符编码间的转换
主要内容: 1.Unicode 和 UTF-8的爱恨纠葛 2.字符在硬盘上的存储 3.编码的转换 4.验证编码是否转换正确 5.Python bytes类型 前 ...
- visual studio2013安装及测试
visual studio2013自同学处拷贝安装至本机,由于安装包较大采用了双重压缩,解压时费了点时间,安装过程更是用了一个小时之久. 1.安装环境: 本机配置:Windows8,Intel(R)C ...
- vs2013——单元测试&& 性能图
一.如何创建单元测试 下面这个博客中写的很详细: http://***/Article/11186 其中需要注意的是,首先新建工程项目,在此目录下Add单元测试项目,还需要在单元测试项目中引用被测试的 ...
- #个人博客作业week2——关于代码规范的个人观点
对于这一讨论的前提我们首先要知道什么是代码规范. 在这个问题上我同意一篇参考文章的观点——代码规范不仅只编码风格.编码风格仅是代码规范的一个方面,除了编码风格,代码规范还包括函数返回值等其他方面.在我 ...