题意:
n个人,他们有他们的重量,要求分成两份,人数与n/2差不能大于1,体重差最小,问两组的体重分别是多少。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,wi[120],sum,sum1,n1,dp[50000][103];
int main(){
while(scanf("%d",&n)!=EOF){
sum=0;
for(int i=1;i<=n;i++){
scanf("%d",&wi[i]);
sum+=wi[i];
}
memset(dp,0,sizeof(dp));
dp[0][0]=1;
sum1=sum/2;
n1=(n+1)/2;
for(int i=1;i<=n;i++){
for(int j=sum;j>=wi[i];j--){
for(int k=n1;k>0;k--){
if(dp[j-wi[i]][k-1]){
dp[j][k]=1;
}
}
}
}
int i;
for(i=sum1;i>=0;i--){
if(dp[i][n1]||dp[i][n1-1]){
break;
}
}
printf("%d %d\n",i,sum-i);
}
return 0;
}