J 正整數分組

2022-03-22 18:17:57 字數 1017 閱讀 9242

將一堆正整數分為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輸出這個最小差

sample input

512

345

sample output

1值 總是在,0到(sum+1)/2或者sum/2之間乙個,sum/2或者(sum+1)/2到sum之間乙個。我們只要求乙個最靠近sum/2或者(sum+1)/2的值,就可以了。

這樣sum - dp[sum/2]*2最小或者絕對值(sum - dp[(sum+1)/2])最小。

要想知道為什麼,會這樣,你只需要去想一下,在求m是不是素數,只需要2到根號下m之間,也可以得出結果。

下面**,乙個一維陣列,乙個二維陣列!

**如下:

#include#include#include#includeusing namespace std;

int a[105];

int dp[10005];

int main()

for(int i=1;i<=n;i++)

}printf("%d\n",abs(sum-dp[(sum+1)/2]*2));

return 0;

}

**如下:

#include#include#include#includeusing namespace std;

int a[105];

int dp[105][10005];

int main()

for(int i=1;i<=n;i++)

else}}

printf("%d\n",abs(sum-dp[n][(sum+1)/2]*2));

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 初看題目,第一想到貪心。怎麼貪?排序,每次把數放到 最有利 的一邊,最有利指的是每次都把數放到使得結果差值盡...