poj 2576二维01背包

来源:互联网 发布:福建都是用晨曦软件 编辑:程序博客网 时间:2024/05/21 19:47

题意:

    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;}