將一堆正整數分為2組,要求2組的和相差最小。
例如:1 2 3 4 5,將1 2 4分為1組,3 5分為1組,兩組和相差1,是所有方案中相差最少的。
input
第1行:乙個數n,n為正整數的數量。output第2 - n+1行,n個正整數。
(n <= 100, 所有正整數的和 <= 10000)
輸出這個最小差input示例
512output示例345
1
本題是01揹包的變形,和郵票分你一半這道題很像,刷了大半天的01揹包的題,感覺就這兩種型別,一種是直接的,一種是稍微有些變形的,可能刷的題有些少吧。
#include #include#include#includeusing namespace std;
int main()
printf("%d\n",sum-2*dp[sum/2]);
return 0;
}
51nod 正整數分組 01揹包
將一堆正整數分為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 輸出這個最小差 inpu...
51nod 1007 正整數分組(01揹包)
51nod 1007 正整數分組 類01揹包 解決問題 將一堆正整數分為2組,要求2組的和相差最小。換言之 這n個數中選出一些數,這些數的總和不超過 sum 2 且總和盡可能大。解決方法 dp i,j 表示 從前i個數中選出的數,總和不超過j的時候能得到的最大的和。初始值 dp 0,x 0 遞推式是...
51Nod 1007 正整數分組(01揹包)
基準時間限制 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個正...