LightOJ 1076 Get the Containers(二分经典)
2016-04-30 08:40
525 查看
1076 - Get the Containers
A conveyor belt has a number of vessels of different capacities each filled to brim with milk. The milk from conveyor belt is to be filled into 'm' containers. The constraints are:
1. Whenever milk from a vessel is poured into a container, the milk in the vessel must be completely poured into that container only. That is milk from same vessel cannot be poured into different containers.
2. The milk from the vessel must be poured into the container in order which they appear in the conveyor belt. That is, you cannot randomly pick up a vessel from the conveyor belt and fill the container.
3. The ith container must be filled with milk only from those vessels that appear earlier to those that fill jth container,
for all i < j.
Given the number of containers m, you have to fill the containers with milk from all the vessels, without leaving any milk in the vessel. The containers need not necessarily have same capacity. You are given the
liberty to assign any possible capacities to them. Your job is to find out the minimal possible capacity of the container which has maximal capacity.
Each case contains two integers n (1 ≤ n ≤ 1000), the number of vessels in the conveyor belt and then m (1 ≤ m ≤ 106), which
specifies the number of containers to which you have to transfer the milk. The next line contains the capacity c (1 ≤ c ≤ 106) of each vessel in order which they appear
in the conveyor belt. Note that, milk is filled to the brim of any vessel. So the capacity of the vessel is equal to the amount of milk in it.
the containers be 3, 7 and 5. Then we can also pour the milk, however, the maximum capacity is 7. As we want to find the result, where the maximum capacity is as low as possible; the result is 6.
二分的经典题目
PDF (English) | Statistics | Forum |
Time Limit: 2 second(s) | Memory Limit: 32 MB |
1. Whenever milk from a vessel is poured into a container, the milk in the vessel must be completely poured into that container only. That is milk from same vessel cannot be poured into different containers.
2. The milk from the vessel must be poured into the container in order which they appear in the conveyor belt. That is, you cannot randomly pick up a vessel from the conveyor belt and fill the container.
3. The ith container must be filled with milk only from those vessels that appear earlier to those that fill jth container,
for all i < j.
Given the number of containers m, you have to fill the containers with milk from all the vessels, without leaving any milk in the vessel. The containers need not necessarily have same capacity. You are given the
liberty to assign any possible capacities to them. Your job is to find out the minimal possible capacity of the container which has maximal capacity.
Input
Input starts with an integer T (≤ 100), denoting the number of test cases.Each case contains two integers n (1 ≤ n ≤ 1000), the number of vessels in the conveyor belt and then m (1 ≤ m ≤ 106), which
specifies the number of containers to which you have to transfer the milk. The next line contains the capacity c (1 ≤ c ≤ 106) of each vessel in order which they appear
in the conveyor belt. Note that, milk is filled to the brim of any vessel. So the capacity of the vessel is equal to the amount of milk in it.
Output
For each case, print the case number and the desired result. See the samples for exact formatting.Sample Input | Output for Sample Input |
2 5 3 1 2 3 4 5 3 2 4 78 9 | Case 1: 6 Case 2: 82 |
Note
For the first case, the capacities of the three containers be 6, 4 and 5. So, we can pour milk from the first three vessels to the first container and the rest in other two containers. So, the maximum capacity of the container is 6. Suppose the capacities ofthe containers be 3, 7 and 5. Then we can also pour the milk, however, the maximum capacity is 7. As we want to find the result, where the maximum capacity is as low as possible; the result is 6.
二分的经典题目
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ans[110000],a[110000]; int main() { int t,m,n,k,l,i,j; int flag=1; scanf("%d",&t); memset(ans,0,sizeof(ans)); while(t--) { scanf("%d%d",&m,&n); int sum=0; for(i=0;i<m;i++) { scanf("%d",&a[i]); sum+=a[i]; } int left=1; int right=sum; int mid; l=0; while(right>=left) { int sum1=0; k=0; mid=(left+right)/2; for(i=0;i<m;i++) { if(a[i]>mid)//注意,每一个数不能比结果值大 { k=n+1; break; } if(sum1+a[i]<=mid)//这个地方注意一下,想想为什么 { sum1+=a[i]; } else { sum1=a[i]; k++; } if(i==m-1) k++; } if(k<=n) { ans[l++]=mid; right=mid-1; } else { left=mid+1; } } printf("Case %d: %d\n",flag++,ans[l-1]); } return 0; }
相关文章推荐
- Jetbrains IntelliJ IDEA破解方法
- LeetCode 336. Palindrome Pairs(回文对)
- 人工智能中对机器学非常简要的介绍
- Disconnected: No supported authentication methods available (server sent: publickey)
- CodeForces - 582B Once Again... (LIS变型)好题
- public static void main(String[] args)字段解释
- LeetCode------Contains Duplicate
- CodeForces 567A Lineland Mail
- hdu 1789 Doing Homework again
- time_wait状态
- flume-ng负载均衡load-balance、failover集群搭建
- android.intent.action.MAIN与android.intent.category.LAUNCHER的区别
- CLOSE_WAIT问题
- RAID5 的那些事
- async & await 的用法
- 百度地图开发(1)-----如何从hello baidumap定位所处城市并进行切换
- jenkins email配置
- 172. Factorial Trailing Zeroes
- HDU 1789 Doing Homework again 贪心
- 关于使用thumbnailator生成缩略图异常问题