NEFU 1211 (二分枚举)

题意:

中文

(样例解释:

第一组:用5天卖7件物品,最优答案每天的情况分别为(100+400, 300+100, 500 ,101 ,400),5天中最大值为500。

组:用2天卖4件物品,最优答案每天的情况分别为(2+642),2天中最大值为8

若第二组可以用3天卖4件物品,最优答案每天的情况分别为(2, 64+2),3天中最大值为6

思路:

二分枚举每天卖的最大值上限。

代码:

#include 
#include 
#include 
using namespace std;
const int MAXN=100005;
long long a[MAXN],fans;
int T,n,m;
bool solve(long long lim){
    long long sum=0;
    long long cost=1;
    long long ans=0;
    int i=0;
    while(1){
        if(i>=n) break;
        if(cost>m) return 0;
        if(a[i]+sum>lim){
            ans=max(ans,sum);
            sum=0;
            cost++;

            continue;
        }
        sum+=a[i];
        i++;
    }
    return 1;
}
int main(){
    cin>>T;
    while(T--){
        cin>>n>>m;
        long long ri=0;
        for(int i=0;i

Description


你的朋友小明有n个古董,每个古董的价值给出,然后小明要在接下来的m天内将所有古董依次卖出(注意:必须依次卖出,也就是从第一个开始卖卖到最后一个),小明希望
的是这m天内卖出的价值和的最大值最小,你来帮助他把

Input


一共T组数据,每组一个n和m,代表n个古董以及m天(1<=m<=n),然后下面n行为古董的价值,古董价值为1到10000(1<=n<=100000)

Output


输出m天内卖出的古董价值和的最大值(当然是最优的时候),我们希望的是这个最大值越小越好

Sample Input


3
7 5
100
400
300
100
500
101
400
4 3
2
6
2
4
4 2
2
6
2
4

Sample Output


500
6
8

你可能感兴趣的:(>水题<,——————基础——————)