题目:
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1007
01背包装物品。容量为和的一半,物品的价值重量都为数的值。背包内最大的价值就是相差最少的方案。
代码:
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;
int a[105];
int dp[10010];
int main()
{
int N;
cin>>N;
int sum=0;
for(int i=0;i<N;i++)
{
cin>>a[i];
sum+=a[i];
}
int b=sum/2;
for(int i=0;i<N;i++)
{
for(int j=b;j>=a[i];j--)
{
dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
}
}
cout<<sum-dp[b]-dp[b]<<endl;
return 0;
}