uva 714——Copying Books
来源:互联网 发布:上海东行网络 编辑:程序博客网 时间:2024/04/26 07:29
题意:把一个m个整数的序列划分成k个连续非空的子序列,使得子序列和的最大值最小。
思路:二分。遇到最大值最小大多都二分了,让划分的子序列都不超过x,根据x来judge最终结果k个是多还是少,然后二分来调整x直到出现k个序列。
code:
#include <bits/stdc++.h>using namespace std;typedef long long ll;#define int long longll m,k,v[505],c[505];bool judge(ll x){ ll p=0,q=0; for (int i=0;i<m;i++) { p+=v[i]; if (v[i]>x) return false; if (p>x){p=v[i];q++;} } if (q>k-1) return false; return true;} main(){ int T; scanf("%d",&T); while (T--) { int s=0,len;memset(c,0,sizeof(c)); scanf("%lld %lld",&m,&k); for (int i=0;i<m;i++) scanf("%lld",&v[i]),s+=v[i]; int l=0,r=s,mid; while (l<r) { mid=l+(r-l)/2; if (!judge(mid)) l=mid+1; else r=mid; } len=s=0; for (int i=m-1;i>=0;i--) { s+=v[i]; if (s>r||k-len==i+2){s=v[i];c[len++]=i;} } len=k-2; for (int i=0;i<m;i++) { printf("%lld",v[i]); if (i!=m-1) printf(" "); if (len>=0&&i==c[len]) printf("/ "),len--; } puts(""); }}
0 0
- 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
- UVA - 714 Copying Books
- uva 714 Copying Books
- UVA 714 Copying Books
- 最长连续序列
- 手机css3动画与animate动画流畅度比较
- 设置xcode中模版tableViewCell的textLabel和detailTextLabel背景颜色
- MATLAB线性分类器
- 关于html中CSS的小结
- uva 714——Copying Books
- 机器学习数据预处理
- PHP PDOException MySql Error Codes and Messages
- 剖析Java同步块synchronized及常用使用方法
- codeforces 592D 树链剖分
- Android 自定义seekbar 代码实现
- uva 1451——Average
- Java Calendar 类的时间操作
- codeforces 593B Anton and Lines