日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uva 714——Copying Books

發(fā)布時間:2023/11/30 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uva 714——Copying Books 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:把一個m個整數(shù)的序列劃分成k個連續(xù)非空的子序列,使得子序列和的最大值最小。


思路:二分。遇到最大值最小大多都二分了,讓劃分的子序列都不超過x,根據(jù)x來judge最終結(jié)果k個是多還是少,然后二分來調(diào)整x直到出現(xiàn)k個序列。


code:

#include <bits/stdc++.h> using namespace std;typedef long long ll; #define int long long ll 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("");} }

總結(jié)

以上是生活随笔為你收集整理的uva 714——Copying Books的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。