問題 正整數分組

2021-08-06 03:38:22 字數 1036 閱讀 7570

題目描述

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

2 3

4 5

樣例輸出

1題解:其實只是一道典型的01揹包型的dp題,要使得差值最小,及盡可能的接近數總和的一半,即拿物品(每種只有乙個)去湊sum/2的揹包體積。

都是由於我湖oj測試資料比較水,可以用遞迴去做,下面附說遞迴**和dp**

遞迴ac**:

#include 

#include

#include

using

namespace

std;

int a[101],cha=999,n,sum;

void fun(int c,int b)

return;

}++b;

fun(a[b],b);

sum=temp;

fun(-a[b],b);

return;

}int main()

sum=0;

fun(-a[0],0);

cout

0;}

dp ac**

#include 

#include

#include

using

namespace

std;

const

int maxn=10005;

int f[101][maxn],n;

int main()

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

}/* for(int i=1;i<=n;i++)

正整數分組

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