最大值最小化
来源:互联网 发布:matlab 如何遍历数组 编辑:程序博客网 时间:2024/04/30 02:44
- 题目描述:
在印刷术发明之前,复制一本书是一个很困难的工作,工作量很大,而且需要大家的积极配合来抄写一本书,团队合作能力很重要。
当时都是通过招募抄写员来进行书本的录入和复制工作的, 假设现在要抄写m本书,编号为1,2,3...m, 每本书有1<=x<=100000页, 把这些书分配给k个抄写员,要求分配给某个抄写员的那些书的编号必须是连续的。每个抄写员的速度是相同的,你的任务就是找到一个最佳的分配方案,使得所有书被抄完所用的时间最少。
- 输入:
输入可能包含多个测试样例。
第一行仅包含正整数 n,表示测试案例的个数。
对于每个测试案例,每个案例由两行组成,在第一行中,有两个整数m和 k, 1<=k<=m<=500。 在第二行中,有m个整数用空格分隔。 所有这些值都为正且小于100000。
- 输出:
对应每个测试案例,
输出一行数字,代表最佳的分配方案全部抄写完毕所需要的时间。
- 样例输入:
29 3100 200 300 400 500 600 700 800 9005 4100 100 100 100 100
- 样例输出:
1700200
#include <stdio.h>int a[501];int check(int mid,int m,int k){int sum = 0,cnt = 0;;for(int i = 0;i < m;i++){if(sum + a[i] > mid){cnt++;sum = a[i];}elsesum += a[i];}cnt++;if(cnt > k)return 0;elsereturn 1;}int main(){int n,m,k,base,top;while(scanf("%d",&n) != EOF){while(n--){scanf("%d %d",&m,&k);base = top = 0;for(int i = 0;i < m;i++){scanf("%d",&a[i]);top += a[i];if(a[i] > base)base = a[i];}while(base <= top){int mid = (base + top) / 2;if(check(mid,m,k))top = mid - 1;elsebase = mid + 1;}printf("%d\n",base);}}return 0;}
- 最大值最小化
- 最大值最小化
- 最大值最小化
- 最大值最小化
- 最大值最小化
- 最大值最小化
- 最大值最小化
- 最大值最小化
- 最大值最小化
- 最大值最小化
- 最大值最小化
- 最大值最小化问题
- 最大值最小化问题
- 题目1502:最大值最小化
- 最大值最小化--uva714
- 最大值最小化 二分查找
- HLJU1043: 最大值最小化
- hdu 4004 最大值最小化
- 饭卡 hdu 2546
- hdu 1049(1.2.3)
- Linux安装系统调用表更改模块时系统崩溃(unable to handle kernel paging request at XX)
- 进程间的通信-消息队列
- ASM函数监听实现-之简单静态方法注入
- 最大值最小化
- 实验4 [bx]和loop的使用——第二小题
- 常用的字符串加密和解密
- malloc与calloc
- JVM字节码初探--字节码
- adb介绍
- PythonChallenge 挑战之路 Level-29
- 三种基础的博弈知识和自己的小总结
- hdu2955 Robberies (01背包)