这两道题其实是一样的。。。
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 ",sum-2*dp[sum/2]) ; } } return 0 ; }