UVa 714
来源:互联网 发布:vb mac 编辑:程序博客网 时间:2024/06/01 07:56
題目:抄m本書,書的編號是連續的,現在要把這些書,按照連續編號分成k組,
每本書有頁數,使得頁數和最大的那組總頁數最小,輸出方案。
分析:貪心、二分。利用二分頁數總和,貪心判斷最少需要的組數。
輸出答案是從後向前組合即可,這裡也是貪心。
說明:900題了╮(╯▽╰)╭。
#include <stdio.h>int page[505];int part(long long length, int m){for (int i = m-1; i >= 0; -- i) {if (length < page[i]) {return m+1;}}long long sum = 0LL;int count = 1;for (int i = m-1; i >= 0; -- i) {if (sum + page[i] > length) {sum = 0;count ++;}sum += page[i];}return count;}void output(long long length, int m, int k){long long sum = page[m];int s = m-1;while (s >= k && sum + page[s] <= length) {sum += page[s --];}if (s >= 0) {output(length, s, k-1);printf(" / ");}for (int i = s+1; i < m; ++ i) {printf("%d ", page[i]);}printf("%d", page[m]);}int main(){ int n, m, k; scanf("%d", &n);while (n --) {scanf("%d%d", &m, &k);long long mid = 0LL, left = 0LL, right = 0LL; for (int i = 0; i < m; ++ i) { scanf("%d", &page[i]); right = right + page[i]; } // 二分while (left < right) {mid = left + (right-left)/2;if (part(mid, m) > k) {left = mid+1;}else {right = mid;}}output(left, m-1, k-1);puts(""); } return 0;}
0 0
- UVA 714
- UVa 714
- uva 714
- uva 714 Copying Books
- UVa 714 - Copying Books
- uva 714 - Copying Books
- uva 714 - Copying Books
- UVA 714 Copying Books
- UVa:714 Copying Books .
- uva 714 Copying Books
- Uva 714 - Copying Books
- uva 714 Copying Books
- UVa 714 Copying Books
- Uva - 714 - Copying Books
- UVA 714 - Copying Books
- UVa 714 Copying Books
- uva 714 - Copying Books
- UVA - 714 Copying Books
- Eclipse中java注释模板
- CSU-1779(暴力)
- Spring 面向切面编程AOP
- Charles 抓包工具使用方法
- c++之Vector(动态 )
- UVa 714
- HTML5 进阶系列:web Storage
- Freemarker自定义标签
- unix高级环境编程(二)-------------------基础知识
- angularJs中关于ng-class的三种使用方式说明
- java面试题经典1
- Apache服务器错误问题Internal Server Error
- Java之TCP网络编程
- BZOJ 3208 花神的秒题计划Ⅰ