题目链接

二分——Brownie Slicing

题目描述

Bessie has baked a rectangular brownie that can be thought of as an RxC grid (1 <= R <= 500; 1 <= C <= 500) of little brownie squares. The square at row i, column j contains Nij(0 <= Nij <= 4,000) chocolate chips.
Bessie wants to partition the brownie up into AB chunks (1 <= A <= R; 1 <= B <= C): one for each of the AB cows. The brownie is cut by first making A-1 horizontal cuts (always along integer coordinates) to divide the brownie into A strips. Then cut each strip independently with B-1 vertical cuts, also on integer boundaries. The other A*B-1 cows then each choose a brownie piece, leaving the last chunk for Bessie. Being greedy, they leave Bessie the brownie that has the least number of chocolate chips on it.
Determine the maximum number of chocolate chips Bessie can receive, assuming she cuts the brownies optimally.
As an example, consider a 5 row x 4 column brownie with chips
distributed like this:

Bessie must partition the brownie into 4 horizontal strips, each with two pieces. Bessie can cut the brownie like this:


Thus, when the other greedy cows take their brownie piece, Bessie still gets 3 chocolate chips.

输入描述

Line 1: Four space-separated integers: R, C, A, and B
Lines 2…R+1: Line i+1 contains C space-separated integers: Ni1,…,NiC

输出描述

Line 1: A single integer: the maximum number of chocolate chips that Bessie guarantee on her brownie

示例

输入

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

输出

3

题目大意

给定一个 R 行 C 列的矩形,将其分成 A * B 块,我们需要找到最小块的最大值。

分析

二分答案,然后用贪心判断是否能切成 A * B 块。

#include<bits/stdc++.h>
using namespace std;
int r,c,a,b,f[505][505],s[505][505];int check(int mid)
{int cnta=0,cntb=0,flaga=1,flagb=1,sum=0;for(int i=1;i<=r;i++){flagb=1;cntb=0;for(int j=1;j<=c;j++){sum=s[i][j]-s[flaga-1][j]-s[i][flagb-1]+s[flaga-1][flagb-1];if(sum>=mid){    // 当和大于或等于 mid 时,就可以切开 flagb=j+1;  // 更新 flagb cntb++;}}if(cntb>=b){ // 如果可以切 b 块,则将 cnta 加一,并更新 flaga cnta++;flaga=i+1;}}if(cnta>=a){ // 判断是否满足需要切的行数,若满足则返回 1 return 1;}return 0;
}int main()
{cin>>r>>c>>a>>b;for(int i=1;i<=r;i++){int m=0;for(int j=1;j<=c;j++){cin>>f[i][j];m+=f[i][j];s[i][j]=s[i-1][j]+m;  // 前缀和 }}int left=0,right=s[r][c],ans;while(left<=right){     // 二分 int mid=(left+right)/2;if(check(mid)){left=mid+1;ans=mid;}else{right=mid-1;}}cout<<ans<<endl;return 0;
}

二分——Brownie Slicing相关推荐

  1. Brownie Slicing(二分枚举答案)

    描述 Bessie has baked a rectangular brownie that can be thought of as an RxC grid (1 <= R <= 500 ...

  2. 语法入门*算法入门题单

    作者:王清楚 链接:https://ac.nowcoder.com/discuss/817596?type=101&order=0&pos=1&page=4&chann ...

  3. 【新手上路】语法入门算法入门题单

    作者:王清楚 链接:[新手上路]语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 来源:牛客网 介绍:本题单分为语法入门和算法 ...

  4. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  5. 分治算法的设计思想(二分检索、二分归并排序)

    分治策略思想: 将原问题划分或者归结为规模较小的子问题. 递归或迭代求解每一个问题. 将子问题的解综合得到原问题的解. 性质: 子问题与原问题具有相同的性质. 子问题的求解彼此独立. 划分时子问题的规 ...

  6. LeetCode简单题之二分查找

    题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...

  7. 二分查找模板全面总结

    二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...

  8. [C] [二分] C语言实现快速排序

    为了以防万一有人想不开想手撕快排呢?比如我. 通过快排来理解二分思想 什么是快排? 快排的思想不难,理解好递归很重要. 什么是递归? 递归,就是在运行的过程中调用自己. 构成递归需具备的条件: 子问题 ...

  9. Showstopper [POJ3484] [二分] [思维]

    Description 给你n个数列,问哪一个数字在所有的数列中出现了奇数次(最多一个). Sample Input 1 10 1 2 10 11 10 1 1 10 11 10 1 4 4 1 1 ...

  10. BZOJ3166 [Heoi2013]Alo 【可持久化trie树 + 二分 + ST表】

    题目 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题. 现在你拥有n颗宝石,每颗宝石 ...

最新文章

  1. dva + antd + mockjs 实现用户管理
  2. c10k问题及其解决方案
  3. python视频教程从入门到精通全集-python从入门到精通视频(全60集)免费高速下载...
  4. Filebeat常用配置
  5. 爬虫IP被禁的简单解决方法
  6. Eigen(1)配置VS2015
  7. 第一百二十一期:当新闻报道用上AR 技术,能为读者带来什么?
  8. 操作系统(12)-【Linux】索引式文件系统
  9. jwt token注销_详解JWT token心得与使用实例
  10. mysqldump简单解析
  11. 中移动酝酿改革数据业务分成模式:SP与CP分开
  12. 如何用iframe代码显示调用网页的指定部分
  13. linux文件移出目录命令_Linux移动文件命令F01
  14. NAT技术与代理服务器的区别
  15. Java实现在线视频通话
  16. 代数学笔记1: 域扩张(一)
  17. 2020-12-06 高等数学:常用积分公式
  18. win10 电脑扬声器显示未插入
  19. 科研写作之word技巧——首行缩进、图 表 公式 自动编号和引用、子标题细节
  20. Linux ALSA音频驱动一:音频系统概述

热门文章

  1. Axure RP 8 软件介绍
  2. 01.【设计模式】工厂模式
  3. windchill安装搭建(保姆式)
  4. python获取已打开的网页内容_用Python获取网页数据
  5. swift - enumerated()
  6. python制作日历_利用Python自动化生成明星定制日历!
  7. 心上莲花:佛教简介(上)
  8. Alibaba Cloud Linux 等保 2.0 三级版操作系统详解
  9. UG NX 12 将草图对象转化为参考线
  10. c语言一个笼子里关了鸡和兔子,成年后的你是否还质疑 古人为什么把鸡和兔子关在一个笼子里...