正整数分组:使一个正整数数组分成两个数组且这两个数组和相差最小,
输出这个最小差.
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[5050*2]={0};
int a[110];
int main()
{
int n;
int sum = 0;
int m;
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i]);
sum += a[i];
}
m=sum/2;
for(int i = 0; i < n; i++)
{
for(int j = m; j >= a[i]; j--)
{
dp[j]=max(dp[j],dp[j-a[i]]+a[i]);//dp[j]表示前i个数字小于sum/2的最大和
}
}
int ans=sum-dp[m]-dp[m];
printf("%d",ans);
return 0;
}