#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int max_difference(vector<int>& nums) {
int n = nums.size();
int sum = 0;
for (int num : nums) {
sum += num;
}
vector<vector<bool>> dp(n + 1, vector<bool>(sum / 2 + 1, false));
dp[0][0] = true;
for (int i = 1; i <= n; ++i) {
for (int j = 0; j <= sum / 2; ++j) {
if (j >= nums[i - 1]) {
dp[i][j] = dp[i - 1][j] || dp[i - 1][j - nums[i - 1]];
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
for (int i = sum / 2; i >= 0; --i) {
if (dp[n][i]) {
return sum - 2 * i;
}
}
return 0;
}
int main() {
vector<int> nums = {1, 5, 11, 5};
cout << "最大差值为:" << max_difference(nums) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1heF9kaWZmZXJlbmNlKHZlY3RvcjxpbnQ+JiBudW1zKSB7CiAgICBpbnQgbiA9IG51bXMuc2l6ZSgpOwogICAgaW50IHN1bSA9IDA7CiAgICBmb3IgKGludCBudW0gOiBudW1zKSB7CiAgICAgICAgc3VtICs9IG51bTsKICAgIH0KCiAgICB2ZWN0b3I8dmVjdG9yPGJvb2w+PiBkcChuICsgMSwgdmVjdG9yPGJvb2w+KHN1bSAvIDIgKyAxLCBmYWxzZSkpOwogICAgZHBbMF1bMF0gPSB0cnVlOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHN1bSAvIDI7ICsraikgewogICAgICAgICAgICBpZiAoaiA+PSBudW1zW2kgLSAxXSkgewogICAgICAgICAgICAgICAgZHBbaV1bal0gPSBkcFtpIC0gMV1bal0gfHwgZHBbaSAtIDFdW2ogLSBudW1zW2kgLSAxXV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IGRwW2kgLSAxXVtqXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBpID0gc3VtIC8gMjsgaSA+PSAwOyAtLWkpIHsKICAgICAgICBpZiAoZHBbbl1baV0pIHsKICAgICAgICAgICAgcmV0dXJuIHN1bSAtIDIgKiBpOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4oKSB7CiAgICB2ZWN0b3I8aW50PiBudW1zID0gezEsIDUsIDExLCA1fTsKICAgIGNvdXQgPDwgIuacgOWkp+W3ruWAvOS4uu+8miIgPDwgbWF4X2RpZmZlcmVuY2UobnVtcykgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9Cg==