poj 3211 背包

来源:互联网 发布:圈子 知乎 编辑:程序博客网 时间:2024/06/02 03:49
#include<stdio.h>#include<string.h>#define MAX(x,y) ((x)>(y)?(x):(y))int w[12][120],num[12],sum[12];int dp[11000];int main(){char s2[100][100],s1[100];int n,m,x;while(~scanf("%d%d",&n,&m)&&(n+m)){memset(num,0,sizeof(num));memset(sum,0,sizeof(sum));for(int i=0;i<n;i++)scanf("%s",s2[i]);for(int i=0;i<m;i++){scanf("%d %s",&x,s1);for(int j=0;j<n;j++){if(strcmp(s2[j],s1)==0){w[j][num[j]]=x;num[j]++;sum[j]+=x; break;    }}}int res=0;for(int i=0;i<n;i++){memset(dp,0,sizeof(dp));int col=sum[i]/2;for(int j=0;j<num[i];j++){for(int k=col;k>=w[i][j];k--)dp[k]=MAX(dp[k],dp[k-w[i][j]]+w[i][j]);}res+=(sum[i]-dp[col]);}printf("%d\n",res); }}

0 0
原创粉丝点击