首先显然地,如果某个格子的权值超过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=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),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-1]-s[u-1][r]+s[u-1][l-1];
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("bzoj1127.in","r",stdin);freopen("bzoj1127.out","w",stdout);const char LL[]="%I64d\n";
#elseconst char LL[]="%lld\n";
#endifk=read(),n=read();low=k,high=k<<1;for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+(a[i][j]=read());if (a[i][j]>=low&&a[i][j]<=high) {cout<<j<<' '<<i<<' '<<j<<' '<<i;return 0;}}for (int i=1;i<=n;i++){for (int j=1;j<=n;j++)if (a[i][j]<low) up[i][j]=up[i-1][j]+1,l[i][j]=l[i][j-1]+1;for (int j=n;j>=1;j--)if (a[i][j]<low) r[i][j]=r[i][j+1]+1;for (int j=1;j<=n;j++)if (up[i][j]>1) l[i][j]=min(l[i][j],l[i-1][j]);for (int j=n;j>=1;j--)if (up[i][j]>1) r[i][j]=min(r[i][j],r[i-1][j]);}for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)if (a[i][j]<low&&sum(j-l[i][j]+1,j+r[i][j]-1,i-up[i][j]+1,i)>=low){L=j-l[i][j]+1,R=j+r[i][j]-1,U=i-up[i][j]+1,D=i;break;}if (!L) cout<<"NIE";else{while (sum(L,R,U,D)>high){if (D>U){if (sum(L,R,U,D-1)<low) U=D;else D--;}else R--;}cout<<L<<' '<<U<<' '<<R<<' '<<D;}return 0;
}

转载于:https://www.cnblogs.com/Gloid/p/9501829.html

BZOJ1127 POI2008KUP(悬线法)相关推荐

  1. 【BZOJ-1127】KUP 悬线法 + 贪心

    1127: [POI2008]KUP Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 317  Solved: 1 ...

  2. [bzoj1127][悬线法]KUP

    Description 给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个n*n的地图 Output 输出矩形的左 ...

  3. 【BZOJ-30391057】玉蟾宫棋盘制作 悬线法

    3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 753  Solved: 444 [Submit][Status][Discuss] ...

  4. BZOJ 3039: 玉蟾宫( 悬线法 )

    最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...

  5. [ZJOI2007]棋盘制作 悬线法dp 求限制下的最大子矩阵

    https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法,听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[20 ...

  6. [ZJOI2007] 棋盘制作(单调栈 / DP悬线法)

    problem 洛谷链接 solution1-单调栈 很容易想到,预处理出每个点向上最大能延伸的长度,然后对每个点求一个矩阵面积. 然后思考优化,不难想到每次对一行进行求解. 每一行的所有列一起构成了 ...

  7. 【UVALive】3029 City Game(悬线法)

    题目 传送门:QWQ 分析 以前见到过差不多的这题. xhk说是单调栈水题,但我又不会单调栈,于是当时就放下了. 这么久过去了我还是不会用单调栈做这题,用的是悬线法. 非常好写 代码 #include ...

  8. 【BZOJ1057】【codevs1428】棋盘制作,悬线法

    传送门1 传送门2 思路: 比较简单的悬线法 相关资料自行百度 看一会就能明白的 反正这个就是模板题啦(敲桌) 虽然说好不发水题了,但这次发上来也就是给大家也给自己当个板子使-- 代码: #inclu ...

  9. 最大子矩阵问题悬线法 学习小结

    最近在写dp的题目 但是我这个同学又又又又生病了 学习了一下多叉树的背包问题和最大子矩阵的问题,还有攒了几道期望,先总结一下矩阵问题: 问题模型: 在一个给定的矩形中有一些障碍点,找出内部不包含障碍点 ...

最新文章

  1. SOJ 4543 4542
  2. Linq TO SQL中映射属性的说明
  3. db2设置默认schema_DB2中设置当前会话的Schema
  4. JSP学习02-config内置对象
  5. 【企业管理】组织与管理的思考
  6. 模拟角频率和数字角频率的关系
  7. sql 整改措施 注入_改进的SQL防注入(加强抑错)-ASP教程,安全加密
  8. python py转exe逆向
  9. GWT项目创建时遇到的问题
  10. android u盘怎么打开文件夹图标不显示不出来了,U盘图标显示不正常怎么办,U盘图标怎么显示出来...
  11. Spark+Scala:数据分析统计
  12. Python中函数的说明与注释
  13. 下载keep运动软件_Keep下载_Keep苹果官方免费版APP下载[健身运动]-下载之家
  14. deepin20如何换源_Deepin 20 安装教程和基本配置
  15. (实用篇)php常用字符串函数实例总结【转换,替换,计算,截取,加密】
  16. 阿D SQL注入工具常用的一些注入命令
  17. 基于bibtex的文献管理(详细)
  18. 涂子沛:个人信息保护入法,堵住非法变现通道
  19. 谈谈 HashMap(int initialCapacity)与内存分配机制
  20. 转载系列 |ICCV2019:ACNet:Strengthening the Kernel Skeletons for Powerful CNN via Asymmetric Convolution

热门文章

  1. TypeScript算法专题 - blog4 - 单链表节点的两-两翻转(两两一组逆序)
  2. css3盒子模型微课_CSS3 盒子模型
  3. html字体颜色闪动,HTML最简单的文字闪烁代码
  4. LinuxC语言のUDP简易聊天室 sokcet
  5. php构造方法什么时候使用,php:构造方法的说明详解
  6. java mvc mvvm_从MVC到MVVM(为什么要用vue)
  7. struts国际化java_Struts2 的国际化实现方式示例
  8. 安卓android中国象棋chess程序项目源码源代码,C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!,c语言笔记大全...
  9. NLP︱高级词向量表达(一)——GloVe(理论、相关测评结果、Rpython实现、相关应用)
  10. git如何将远程仓库代码,覆盖本地代码