原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1007
思路:01背包,设背包最大重量为总和的一半,然后dp
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAXN = 1e4 + 5;
int dp[10000 + 5], a[MAXN];
int main() {
int n;
scanf("%d", &n);
int sum = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
sum += a[i];
}
for (int i = 0; i < n; i++) {
for (int v = sum / 2; v >= a[i]; v--) {
dp[v] = max(dp[v], dp[v - a[i]] + a[i]);
}
}
printf("%d\n", abs(sum - 2 * dp[sum / 2]));
return 0;
}