这两道题其实是一样的。。。
zb的生日 ->点击打开链接
邮票分你一半-> 点击打开链接
其实就是把01背包里的总体积换成所有邮票面值之和的一半,同理zb的生日。
邮票AC代码:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std ;
int dp[10000] ;
int n,a[10000],t ;
int main()
{
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
scanf("%d",&n) ;
int sum = 0 ;
memset(dp,0,sizeof(dp)) ;
for(int i = 0 ;i<n ;i++)
{
scanf("%d",&a[i]) ;
sum += a[i] ;
}
for(int i = 0 ;i<n ;i++)
{
for(int j = sum/2;j>=a[i] ;j--)
{
dp[j] = max(dp[j],dp[j-a[i]]+a[i]) ;
}
}
printf("%d\n",sum-2*dp[sum/2]) ;
}
}
return 0 ;
}