正整數分組 V2 51Nod 1128

2021-08-15 23:28:33 字數 788 閱讀 6112

給出乙個長度為n的正整數陣列,不改變陣列元素的順序,將這n個數分為k組。各組中元素的和分別為s1,s2....sk。如何分組,使得s1至sk中的最大值最小?

例如:1 2 3 4 5 6分為3組, ,元素和為6, 9, 6,最大值為9。也可以分為 。元素和為:10 5 6,最大值為10。因此第一種方案更優。並且第一種方案的最大值是所有方案中最小的。輸出這個最小的最大值。

input第1行:2個數n, k,中間用空格分隔,n為陣列的長度,k為要分為多少組。(2 <= k < n <= 50000) 

第2 - n + 1行:陣列元素(1 <= aii

<= 10^9)output輸出這個最小的最大值。sample input

6 312

3456

sample output
9

題解:二分加貪心,多購建幾個函式,注意用long long

**(c語言)

#include

#include

int n,k;

long long sum,a[50010];

int check(long long t,int k)

else sum+=a[i];

}if(k>0) return 1;

return 0;

}long long find(long long l,long long r)

return l;

}int main()

printf("%lld\n",find(1,sum));

}return 0;

}

正整數分組

將一堆正整數分為2組,要求2組的和相差最小。例如 1 2 3 4 5,將1 2 4分為1組,3 5分為1組,兩組和相差1,是所有方案中相差最少的。整數個數n 100,所有整數的和 10000 初看題目,第一想到貪心。怎麼貪?排序,每次把數放到 最有利 的一邊,最有利指的是每次都把數放到使得結果差值盡...

正整數分組

將一堆正整數分為2組,要求2組的和相差最小。例如 1 2 3 4 5,將1 2 4分為1組,3 5分為1組,兩組和相差1,是所有方案中相差最少的。input 第1行 乙個數n,n為正整數的數量。第2 n 1行,n個正整數。n 100,所有正整數的和 10000 output 輸出這個最小差 samp...

正整數分組

將一堆正整數分為2組,要求2組的和相差最小。例如 1 2 3 4 5,將1 2 4分為1組,3 5分為1組,兩組和相差1,是所有方案中相差最少的。整數個數n 100,所有整數的和 10000 初看題目,第一想到貪心。怎麼貪?排序,每次把數放到 最有利 的一邊,最有利指的是每次都把數放到使得結果差值盡...