HDU1171

来源:互联网 发布:删除表多个字段sql 编辑:程序博客网 时间:2024/05/20 21:21

以sum/2为总容量的0-1背包

#include <iostream>#include <algorithm>#include <string.h>using namespace std;int li[5010],dp[250005];int main(){    int n;    while(cin>>n){        if(n<0)              break;        int num=0,sum=0;        for(int i=0;i<n;i++){            int a,b;            cin>>a>>b;            for(int k=0;k<b;k++){                li[num++]=a;            }            sum+=a*b;        }        memset(dp,0,sizeof(dp));        for(int i=0;i<num;i++){            for(int j=sum/2;j>=li[i];j--){                dp[j]=max(dp[j],dp[j-li[i]]+li[i]);            }        }        cout<<max(dp[sum/2],sum-dp[sum/2])<<" "<<min(dp[sum/2],sum-dp[sum/2])<<endl;    }}
0 0
原创粉丝点击