• USACO Training Section 3.3 Shopping Offers


    拿给出的每种方案作为一种物品
    其他的单卖的物品也作为一种物品

    拿它们去跑背包就行

    注意编号对应上就行


     代码:

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <cctype>
    #include <cstdio>
    #include <locale>
    #include <map>
    using namespace std;
    
    const int MAXN = 110;
    
    struct ITEM {
        int tot, cst;
        int num[6];
    }itm[MAXN];
    int s, n, totnum;
    int num[6], id[1005], req[1005], f[6][6][6][6][6];
    bool usf[1005];
    
    int main() {
        scanf("%d", &s);
        int x = 0, y = 0;
        for (int i = 1; i <= s; ++i) {
            scanf("%d", &itm[i].tot);
            for (int j = 1; j <= itm[i].tot; ++j) {
                scanf("%d%d", &x, &y);
                if (!id[x]) {
                    id[x] = ++totnum;
                    num[totnum] = x;
                }
                itm[i].num[id[x]] = y;
            }
            scanf("%d", &itm[i].cst);
        }
        scanf("%d", &n);
        for (int i = 1; i <= n; ++i) {
            scanf("%d", &x);
            if (!id[x]) {
                id[x] = ++totnum;
                num[totnum] = x;
            }
            scanf("%d", &req[id[x]]);
            itm[++s].num[id[x]] = 1;
            itm[s].tot = 1;
            scanf("%d", &itm[s].cst);
        }
        memset(f, 0x3f, sizeof(f));
        f[0][0][0][0][0] = 0;
        for (int i = 1; i <= s; ++i) {
            for (int a = itm[i].num[1]; a <= req[1]; ++a) {
                for (int b = itm[i].num[2]; b <= req[2]; ++b) {
                    for (int c = itm[i].num[3]; c <= req[3]; ++c) {
                        for (int d = itm[i].num[4]; d <= req[4]; ++d) {
                            for (int e = itm[i].num[5]; e <= req[5]; ++e) {
                                f[a][b][c][d][e] = min(f[a][b][c][d][e], f[a - itm[i].num[1]][b - itm[i].num[2]][c - itm[i].num[3]][d - itm[i].num[4]][e - itm[i].num[5]] + itm[i].cst);
                            }
                        }
                    }
                }
            }
        }
        printf("%d
    ", f[req[1]][req[2]][req[3]][req[4]][req[5]]);
        return 0;
    }
    

      

  • 相关阅读:
    工厂模式一
    面向对象的简单理解二
    工厂模式三
    线程的简单学习
    nyoj35 表达式求值
    nyoj305 表达式求值
    poj1298 The Hardest Problem Ever
    poj1363 Rails
    hdu2036 改革春风吹满地
    nyoj467 中缀式变后缀式
  • 原文地址:https://www.cnblogs.com/xcysblog/p/9859959.html
Copyright © 2020-2023  润新知