【题意】给定n*m的数字矩阵,要求横着切A-1刀,对每块再分别竖着切B-1刀,是最小子矩阵最大。

【算法】二分+贪心

【题解】还记得提高组2015跳石头吗?这道题做法一致,只不过拓展到二维而已。

二分最小子矩阵值,考虑行,对于每一刀贪心一行一行拓展到能切马上切。

对于行贪心中得到的若干行,通过列贪心确定是否能切(一列一列拓展)。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int read(){
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
int min(int a,int b){return a<b?a:b;}
int max(int a,int b){return a<b?b:a;}
int abs(int x){return x>?x:-x;}
void mins(int &a,int b){if(a>b)a=b;}
void maxs(int &a,int b){if(a<b)a=b;}
//void insert(int u,int v){tot++;e[tot].v=v;e[tot].from=first[u];first[u]=tot;}
/*------------------------------------------------------------*/
const int inf=0x3f3f3f3f,maxn=; int n,m,sum[maxn][maxn],lx,rx,ly,ry,A,B;
bool calc(int lx,int ly,int rx,int ry,int num){return (sum[rx][ry]-sum[rx][ly-]-sum[lx-][ry]+sum[lx-][ly-])>=num;}
bool pd(int num){
bool yes=;ly=ry=;
for(int j=;j<=B;j++){
while(ry+<=m&&!calc(lx,ly,rx,ry,num))ry++;
if(!calc(lx,ly,rx,ry,num)){yes=;break;}
ly=++ry;
}
return yes;
}
bool check(int num){
bool ok=;
lx=,rx=;
for(int i=;i<=A;i++){
while(rx+<=n&&!pd(num))rx++;
if(!pd(num)){ok=;break;}
lx=++rx;
}
return ok;
}
int main(){
n=read();m=read();A=read();B=read();
for(int i=;i<=n;i++){
for(int j=;j<=m;j++)sum[i][j]=sum[i][j-]+read();
for(int j=;j<=m;j++)sum[i][j]+=sum[i-][j];
}
int l=,r=sum[n][m],mid;
while(l<r){
mid=(l+r)>>;
if(check(mid))l=mid+;else r=mid;
}
printf("%d",l-);
return ;
}

最新文章

  1. 04.LoT.UI 前后台通用框架分解系列之——轻巧的弹出框
  2. 转:spl_autoload_register与autoload的区别详解
  3. 材价看板(1)- 如何建立你的第一个kanban,看看这些暴露的问题你们有没有?
  4. 转帖:如何建立与使用 Window setup project
  5. BZOJ-1607 [Usaco2008 Dec]Patting Heads 轻拍牛头 筛法+乱搞
  6. ubuntu 系统出错一览
  7. ECC中的CRM UI端摆弄
  8. 九度oj 1525 子串逆序打印
  9. assert函数(python)
  10. Linux C/C++ 编程练手 --- 大数相加和大数相乘
  11. Android开源滤镜 仿instagram
  12. 查看sql server数据库各表占用空间大小
  13. Struts2+Spring+Hibernate step by step 03 整合Spring之中的一个(在DAO层验证username和password)
  14. C# Dictionary.Add(key,value) 与 Dictionary[key]=value的区别
  15. jQuery笔记(1)
  16. cocos2d-x 游戏开发之有限状态机(FSM) (四)
  17. APP测试流程的总结
  18. Linux-vim文本编辑器
  19. Web基础 HTML CSS JS JQuery AJAX
  20. python __getattr__

热门文章

  1. javabean的内省技术和BeanUtils的使用
  2. 【Linux】- netstat 命令
  3. Jenkins系列-Jenkins邮件通知
  4. stm32f407启动文件分析
  5. Luogu1053 NOIP2005篝火晚会
  6. Andorid API Package ---&gt; android.accessibilityservice
  7. [洛谷P2742]【模板】二维凸包([USACO5.1]圈奶牛Fencing the Cows)
  8. Ubuntu安装teamviewer注意事项。
  9. Android Fragment 使用详解
  10. POJ1066:Treasure Hunt——题解