博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
USACO2011Brownie Slicing巧克力蛋糕切片
阅读量:5336 次
发布时间:2019-06-15

本文共 2105 字,大约阅读时间需要 7 分钟。

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保证能拿到的最多碎屑数

Solution

    二分答案,然后用贪心思想来检查这个答案。注意题目中输入的a和b是分成几块而不是切几刀的意思。详解见代码。

Code

1 #include
2 #include
3 using namespace std; 4 int x[511][511]; 5 int r,c,a,b; 6 7 bool check(int num)//二分产生的答案 8 { 9 int i=1,j=1,tot2=0;//i,j表示当前横着切的蛋糕上下界,tot2表示横着分成了几块 10 while (j<=r)//然后贪心求出这块横着的蛋糕在满足num的要求的情况下,最多分成几块11 {12 int s=1,sum=0,tot=0;//指针s,指向当前这刀切哪的位置,tot表示竖着切了几刀13 while (s<=c)14 {15 for (int k=i; k<=j; k++)16 sum+=x[k][s];17 if (sum>=num)//满足num,竖着切下一块18 {19 sum=0;20 tot++;21 } 22 s++;//指针后移23 }24 if (tot>=b) {i=j+1; tot2++;}//满足竖着切b刀的条件,横着切一刀,下块蛋糕的边界调整25 j++;//无论满不满足,蛋糕的边界下移26 }27 if (tot2>=a) return true;//满足横着切a刀的条件,返回true28 else return false;29 }30 31 int main()32 {33 int left=-1,right=0;34 cin>>r>>c>>a>>b;35 for (int i=1; i<=r; i++)36 for (int j=1; j<=c; j++)37 {38 cin>>x[i][j];39 right+=x[i][j];40 }41 int mid,st=0,ans=0;42 while (left<=right)//注意二分的边界问题,因为这个卡一个上午43 {44 //if (mid==(left+right)/2) st++;45 mid=(left+right)/2;46 if (check(mid)) {ans=mid; left=mid+1;}//记录做到的最优方案47 else right=mid-1;48 }49 //if (!check(2)) cout<<"OwO"<

 

Source

    http://www.lydsy.com/JudgeOnline/problem.php?id=2196

转载于:https://www.cnblogs.com/Patrick-X/p/6183169.html

你可能感兴趣的文章
Linux 的 date 日期的使用
查看>>
PHP zip压缩文件及解压
查看>>
SOAP web service用AFNetWorking实现请求
查看>>
Java变量类型,实例变量 与局部变量 静态变量
查看>>
mysql操作命令梳理(4)-中文乱码问题
查看>>
Python环境搭建(安装、验证与卸载)
查看>>
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
Windows Phone开发(5):室内装修 转:http://blog.csdn.net/tcjiaan/article/details/7269014
查看>>
详谈js面向对象 javascript oop,持续更新
查看>>
关于这次软件以及pda终端的培训
查看>>
jQuery上传插件Uploadify 3.2在.NET下的详细例子
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
新手村之循环!循环!循环!
查看>>
正则表达式的用法
查看>>
线程安全问题
查看>>
SSM集成activiti6.0错误集锦(一)
查看>>
下拉刷新
查看>>
linux的子进程调用exec( )系列函数
查看>>
MSChart的研究
查看>>
C# 索引器
查看>>