UVa11413 - Fill the Containers(最大值最小化问题)
来源:互联网 发布:windows 手机应用商店 编辑:程序博客网 时间:2024/04/29 05:20
Problem C : Fill 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:
- 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 can not be poured into different containers.
- 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.
- 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
Input Format
A single test case consist of 2 lines. The first line specifies 1<=n<=1000 the number of vessels in the conveyor belt and then 'm' which specifies the number of containers to which, you have to transfer the milk. (1 <= m <= 1000000) .The next line contains, the capacity 1<=c<=1000000 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. There are several test cases terminated by EOF.
Output Format
For each test case, print the minimal possible capacity of the container with maximal capacity. That is there exists a maximal capacity of the containers, below which you can not fill the containers without increasing the number of containers. You have to find such capacity and print it on a single line.
Sample Input
5 31 2 3 4 5
3 2
4 78 9
Sample Output
682
Explanation of the output:
Here you are given 3 vessels at your disposal, for which you are free to assign the capacity. You can transfer, {1 2 3} to the first container, {4} to the second, {5} to third. Here the maximal capacity of the container is the first one which has a capacity of 6. Note that this is optimal too. That is, you can not have the maximal container, have a capacity, less than 6 and still use 3 containers only and fill the containers with all milk.For the second one, the optimal way is, {4 78} into the first container, and {9} to the second container. So the minimal value of the maximal capacity is 82. Note that {4} to first container and {78 9} to the second is not optimal as, there exists a way to have an assignement of maximal capacity to 82, as opposed to 87 in this case.
import java.io.IOException;import java.io.FileInputStream;import java.io.InputStreamReader;import java.io.BufferedReader;import java.io.PrintWriter;import java.io.OutputStreamWriter;import java.io.StreamTokenizer;public class Main{public static boolean DEBUG = false;public BufferedReader cin;public PrintWriter cout;public StreamTokenizer tokenizer;public int n, m, sum;public int[] a;public void init(){try {if (DEBUG) {cin = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\OJ\\uva_in.txt")));} else {cin = new BufferedReader(new InputStreamReader(System.in));}} catch (IOException e) {}cout = new PrintWriter(new OutputStreamWriter(System.out));tokenizer = new StreamTokenizer(cin);}public String next(){try {tokenizer.nextToken();if (tokenizer.ttype == StreamTokenizer.TT_EOF)return null;else if (tokenizer.ttype == StreamTokenizer.TT_WORD)return tokenizer.sval;else if (tokenizer.ttype == StreamTokenizer.TT_NUMBER) return String.valueOf((int)tokenizer.nval);} catch (IOException e) {}return null;}public boolean input(){try {n = Integer.parseInt(next());a = new int[n];m = Integer.parseInt(next());for (int i = 0; i < n; i++) {a[i] = Integer.parseInt(next());sum += a[i];}return true;} catch (Exception e) {return false;}}private boolean check(int num){int cnt = 0;int s = 0;for (int i = 0; i < n; i++) {if (a[i] > num) return false;if (s + a[i] > num) {cnt++;s = 0;}s += a[i];}if (cnt <= m - 1) return true;return false;}public void solve(){int low = 0, high = sum;while (low < high) {int mid = (low + high) >> 1;if (check(mid)) {high = mid;} else {low = mid + 1;}}cout.println(low);cout.flush();}public static void main(String[] args){try {Main solver = new Main();solver.init();while (solver.input()) {solver.solve();}} catch (Exception e) {}}}
- UVa11413 - Fill the Containers(最大值最小化问题)
- UVa 11413 - Fill the Containers
- 【UVa】11413 – Fill the Containers
- 最大值最小化问题
- 最大值最小化问题
- 最大值最小化问题
- 最大值最小化问题
- 最大值最小化问题
- uva11413
- 二分法解决最大值最小化问题
- 二分法解决最大值最小化问题
- UVa 714 - Copying Books,最大值最小化问题
- Copying Books(最大值最小化问题)
- Uva 714Copying Books,(最大值最小化问题)
- uva--714+二分(最大值最小化问题)
- 二分答案方法 — 最大值最小化问题
- 最大值最小化问题——分治
- 最大值最小化
- Zend framework开发前期准备1
- 算法简介—模拟退火算法
- Cxf - Spring集成调用WebServices
- scanf函数详解与缓冲区
- MySQL EXPLAIN 命令详解学习
- UVa11413 - Fill the Containers(最大值最小化问题)
- gsoap
- 稍微复杂一点的Exception异常处理实例
- 排序篇之快速排序
- leetcode第一刷_Binary Tree Preorder Traversal
- JSP——九大内置对象和其四大作用域
- C++的内存分类
- 建立Linux开发环境
- 十六进制转化为十进制 c语言函数