//01背包问题
#include<bits/stdc++.h>
using namespace std;
const int maxn=100+5;
int a[maxn],dp[maxn][5000+5];
int main()
{
int n,sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
int ans=sum/2; //把ans看作背包总容量,数组内的数为背包
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
for(int j=0;j<=ans;j++)
if(j<a[i]) dp[i+1][j]=dp[i][j];
else dp[i+1][j]=max(dp[i][j],dp[i][j-a[i]]+a[i]);
cout<<abs(sum-dp[n][ans]-dp[n][ans])<<endl;
return 0;
}
51nod 1007 01背包变形
最新推荐文章于 2024-08-14 11:57:07 发布