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)); 
}
作者:xxy
本文版权归作者和博客园共有,转载请用链接,请勿原文转载,Thanks♪(・ω・)ノ。
原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/14598588.html