正整數分組

2021-10-18 07:43:23 字數 833 閱讀 9632

一、題目描述

題目描述

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

輸出輸出這個最小差

樣例輸入51

2345

樣例輸出

1二、解題思路

這道題用到了01揹包型的dp題,為了使兩組數和相差最小,那麼兩組數應該都接近於總數的一半,然後就可以使用01揹包演算法了,總體積為總數的一半,然後算出體積最大的情況,最後總體積減去二倍的最大體積就是兩組資料相差的最小體積。

三、參考**

#include

using namespace std;

int dp[

10000];

int a[

10000];

intmain()

int middle=sum/2;

for(

int i=

0; icout<2*dp[middle]

;return0;

}

四、總結

01揹包最初學習的時候也有一點困難,因為只要牽扯到動態規劃,我就感覺到演算法比較抽象,然後就是經過資料的執行,根據題的內容才理解的演算法,然後再熟悉運用。動態規劃運用的時候也比較靈活,需要長時間的練習。

正整數分組

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