基礎DP 正整數分組問題

2021-08-01 08:27:07 字數 716 閱讀 1756

1007 正整數分組

基準時間限制:1 秒 空間限制:131072 kb 分值: 10 難度:2級演算法題

將一堆正整數分為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

輸出這個最小差

input示例

512

345

output示例

1

思路:

最開始用貪心的思想,使選取的一組數的和盡可能達到 sum/2,這樣能接近0,有最小的差值。

所以最開始的dp是下面這樣的:

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

memset(dp,0,sizeof(dp));

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

for(int j=sum/2;j>=a[i];--j)

dp[j]=max(dp[j-a[i]]+a[i],dp[j]);

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

}return 0;

}

問題 正整數分組

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

正整數分組

將一堆正整數分為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...