解题思路:
M-2*dp[ ]
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; int dp[10000]; int a[25]; int main() { int N; while(scanf("%d",&N)!=EOF) { int M=0; for(int i=0;i<N;i++) { cin>>a[i]; M +=a[i]; } memset(dp,0,sizeof(dp)); for(int i=0;i<N;i++) { for(int j=M/2;j>=a[i];j--) { dp[j]=(dp[j]>dp[j-a[i]]+a[i] ? dp[j]:dp[j-a[i]]+a[i]); } } printf("%d\n",M-2*dp[M/2]); } return 0; }