51 nod 1007 正整数分组(背包DP)

http://www.51nod.com/Challenge/Problem.html#problemId=1007

一道没看出来的背包
背包容量为所有数的和的一半
尽可能装满这一半

#include<cstdio>
#include<algorithm>

using namespace std;

int dp[100001];
int a[101];

int main()
{
	int n,s=0;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&a[i]);
		s+=a[i];
	}
	int m=(s+1)/2;
	for(int i=1;i<=n;++i)
		for(int j=m;j>=a[i];--j)
			dp[j]=max(dp[j-a[i]]+a[i],dp[j]);
	printf("%d",abs(s-dp[m]*2)); 
}
posted @ 2021-03-30 20:05  TRTTG  阅读(44)  评论(0编辑  收藏  举报