BZOJ_2196_[Usaco2011 Mar]Brownie Slicing_二分答案+贪心

Description

Bessie烘焙了一块巧克力蛋糕。这块蛋糕是由R*C(1 <= R,C <= 500)个小的巧克力蛋糕组成的。 第i行,第j列的蛋糕有N_ij(1 <= N_ij <= 4,000)块巧克力碎屑。 Bessie想把蛋糕分成A*B块,(1 <= A <= R,1 <= B <= C): 给A*B只奶牛。蛋糕先水平地切A-1刀 (只能切沿整数坐标切)来把蛋糕划分成A块。然后再把剩下来的每一块独立地切B-1刀, 也只能切沿整数坐标切。其他A*B-1只奶牛就每人选一块,留下一块给Bessie。由于贪心, 他们只会留给Bessie巧克力碎屑最少的那块。 求出Bessie最优情况下会获得多少巧克力碎屑。 例如,考虑一个5*4的蛋糕,上面的碎屑分布如下图所示: 1 2 2 1 3 1 1 1 2 0 1 3 1 1 1 1 1 1 1 1 Bessie必须把蛋糕切成4条,每条分成2块。Bessie能像这样切蛋糕: 1 2 | 2 1 --------- 3 | 1 1 1 --------- 2 0 1 | 3 --------- 1 1 | 1 1 1 1 | 1 1 因此,其他贪得无厌的牛拿完后,Bessie仍能够拿走3个巧克力碎屑。

Input

* 第1行: 四个空格隔开的数: R, C, A ,B * 第2-R+1行: 第i+1行有C个整数, N_i1 , N_i2 .. N_iC

Output

* 第1行: 一个整数: Bessie保证能拿到的最多碎屑数

Sample Input

5 4 4 2
1 2 2 1
3 1 1 1
2 0 1 3
1 1 1 1
1 1 1 1

Sample Output

3


二分一个mid。

先对行进行判断,能否这几行中切使其满足列能切B-1刀。

维护每列的行前缀和判断即可。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 550
int A,B,n,m,a[N][N],s[N][N],mid;
bool check_row(int x,int y) {
int i,now=0,sum=0;
for(i=1;i<=m;i++) {
if(sum+s[y][i]-s[x-1][i]>=mid) now++,sum=0;
else sum+=s[y][i]-s[x-1][i];
}
return now>=B;
}
bool check() {
int i,now=0,lst=1;
for(i=1;i<=n;i++) {
if(check_row(lst,i)) now++,lst=i+1;
}
if(lst<=n) if(check_row(lst,n)) now++;
return now>=A;
}
int main() {
scanf("%d%d%d%d",&n,&m,&A,&B);
int i,l=0,r=0,j;
for(i=1;i<=n;i++) {
for(j=1;j<=m;j++) {
scanf("%d",&a[i][j]);
s[i][j]=s[i-1][j]+a[i][j];
r+=a[i][j];
}
}
r++;
while(l<r) {
mid=(l+r)>>1;
if(check()) l=mid+1;
else r=mid;
}
printf("%d\n",l-1);
}

最新文章

  1. dom初识
  2. PHP 图片处理工具类(添加水印与生成缩略图)
  3. AAS代码运行-第11章-1
  4. easyUI数据表格datagrid之分页
  5. Openstack Neutron OVS ARP Responder
  6. Esfog_UnityShader教程_镜面反射SpecularReflection
  7. Promise 使用心得
  8. MySQL中concat函数
  9. nginx fastcgi php-fpm的关系梳理
  10. HDU 1512 Monkey King
  11. MapReduce编程系列 — 6:多表关联
  12. Codeforces Round #261 (Div. 2) D. Pashmak and Parmida&#39;s problem (树状数组求逆序数 变形)
  13. javascript基础学习(八)
  14. JavaScript中的运动数学函数(持续更新)
  15. JavaScript ES5面向对象实现一个todolist
  16. 将IDEA maven项目中src源代码下的xml等资源文件编译进classes文件夹
  17. 织梦CMS安装分享插件
  18. Max Area of Island
  19. 微信自带浏览器不支持form表单post提交方案解决
  20. Java用户自定义函数

热门文章

  1. windows安装RabbitMQ注意事项
  2. T9270 mjt树
  3. 在springboot项目中获取pom.xml中的信息
  4. UICollectionView 讲解
  5. android 查看手机运行的进程列表
  6. 创建git仓库及简单操作命令
  7. 怎样提高hbase的入库性能
  8. Spring4+SpringMVC+Hibernate4整合入门与实例
  9. 关于OC的内存管理-01
  10. Python 包的制作(__init__.py)