1 条题解

  • 0
    @ 2025-5-29 20:21:13
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n,m;
    char col[11][11];
    int cnt[11],cost[11][111];
    int sum[11],dp[50000];
    int getid(char s[])
    {
        int i;
        for(i=0; i<m; i++)
            if(strcmp(col[i],s)==0)
                return i;
    }
    int main()
    {
        int i,j,k,tcost,id;
        char str[11];
        while(cin>>m>>n)
        {
            if(n==0&&m==0) break;
            memset(sum,0,sizeof(sum));
            memset(cnt,0,sizeof(cnt));
            for(i=0; i<m; i++)
                cin>>col[i];
            for(i=0; i<n; i++)
            {
                cin>>tcost>>str;
                id=getid(str);
                cost[id][cnt[id]++]=tcost;
                sum[id]+=tcost;
            }
            int ans=0;
            for(i=0; i<m; i++)
            {
                memset(dp,0,sizeof(dp));
                int mid=sum[i]/2;
                for(j=0; j<cnt[i]; j++)
                    for(k=mid; k>=cost[i][j]; k--)
                        dp[k]=max(dp[k],dp[k-cost[i][j]]+cost[i][j]);
                ans+=(sum[i]-dp[mid]);
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    • 1

    信息

    ID
    2212
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者