【BZOJ】2196: [Usaco2011 Mar]Brownie Slicing
2024-08-28 14:10:42
【题意】给定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 ;
}
最新文章
- 04.LoT.UI 前后台通用框架分解系列之——轻巧的弹出框
- 转:spl_autoload_register与autoload的区别详解
- 材价看板(1)- 如何建立你的第一个kanban,看看这些暴露的问题你们有没有?
- 转帖:如何建立与使用 Window setup project
- BZOJ-1607 [Usaco2008 Dec]Patting Heads 轻拍牛头 筛法+乱搞
- ubuntu 系统出错一览
- ECC中的CRM UI端摆弄
- 九度oj 1525 子串逆序打印
- assert函数(python)
- Linux C/C++ 编程练手 --- 大数相加和大数相乘
- Android开源滤镜 仿instagram
- 查看sql server数据库各表占用空间大小
- Struts2+Spring+Hibernate step by step 03 整合Spring之中的一个(在DAO层验证username和password)
- C# Dictionary.Add(key,value) 与 Dictionary[key]=value的区别
- jQuery笔记(1)
- cocos2d-x 游戏开发之有限状态机(FSM) (四)
- APP测试流程的总结
- Linux-vim文本编辑器
- Web基础 HTML CSS JS JQuery AJAX
- python __getattr__
热门文章
- javabean的内省技术和BeanUtils的使用
- 【Linux】- netstat 命令
- Jenkins系列-Jenkins邮件通知
- stm32f407启动文件分析
- Luogu1053 NOIP2005篝火晚会
- Andorid API Package --->; android.accessibilityservice
- [洛谷P2742]【模板】二维凸包([USACO5.1]圈奶牛Fencing the Cows)
- Ubuntu安装teamviewer注意事项。
- Android Fragment 使用详解
- POJ1066:Treasure Hunt——题解