思路:
01背包基础题。把sum/2当作体积。
#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;
int dp[105][10010];
int a[105];
int main()
{
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++)
{cin>>a[i];
sum+=a[i];
}
for(int i=1;i<=n;i++)
{
for(int j=a[i];j<=sum/2;j++)
{
if((dp[i][j-a[i]]+a[i])<=sum/2)
dp[i][j]=max((dp[i-1][j-a[i]]+a[i]),dp[i-1][j]);
else
dp[i][j]=dp[i-1][j];
}
}
cout<<fabs((sum-dp[n][sum/2])-dp[n][sum/2]);
return 0;
}