• poj3211


    01背包

    View Code
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    #define maxn 105
    #define maxm 15
    #define maxl 50
    #define maxt maxn * 1000
    
    struct Cloth
    {
        int t, c;
    }cloth[maxn];
    
    int m, n;
    char color[maxm][maxl];
    bool f[maxt];
    
    bool operator < (const Cloth &a, const Cloth &b)
    {
        return a.c < b.c;
    }
    
    int getid(char *a)
    {
        for (int i = 0; i < m; i++)
            if (!strcmp(a, color[i]))
                return i;
        return -1;
    }
    
    void input()
    {
        for (int i = 0; i < m; i++)
            scanf("%s", color[i]);
        for (int i = 0; i < n; i++)
        {
            char temp[maxl];
            scanf("%d%s", &cloth[i].t, temp);
            cloth[i].c = getid(temp);
        }
    }
    
    int bag(int w[], int num, int sum)
    {
        memset(f, 0, sizeof(bool) * (sum + 1));
        f[0] = true;
        for (int i = 0; i < num; i++)
            for (int j = sum; j - w[i] >= 0; j--)
                f[j] = f[j] || f[j - w[i]];
        int ret = sum;
        while (!f[ret])
            ret--;
        return ret;
    }
    
    void work()
    {
        int l = 0;
        int wash[maxn];
        int ans = 0;
        for (int i = 0; i < m; i++)
        {
            int x = 0;
            int sum = 0;
            while (cloth[l].c == i)
            {
                wash[x++] = cloth[l].t;
                sum += cloth[l].t;
                l++;
            }
            ans += sum - bag(wash, x, sum / 2);
        }
        printf("%d\n", ans);
    }
    
    int main()
    {
        //freopen("t.txt", "r", stdin);
        while (scanf("%d%d", &m, &n), m | n)
        {
            memset(cloth, -1, sizeof(cloth));
            input();
            sort(cloth, cloth + n);
            work();
        }
        return 0;
    }
  • 相关阅读:
    Neko Performs Cat Furrier Transform CodeForces
    Neko does Maths CodeForces
    Game HDU
    HDU
    CF1155D Beautiful Array 贪心,dp
    二维差分
    B
    一维差分
    状压dpHDU
    [转载] HBase vs Cassandra:我们迁移系统的原因
  • 原文地址:https://www.cnblogs.com/rainydays/p/2576166.html
Copyright © 2020-2023  润新知