湖南多校对抗赛(2015.05.10)(国防科大学校赛决赛-Semilive)E

其实这个题就是分组背包的模板题。要不是当时SB,把变量弄错,就A了,还是没有真正的理解分组背包。。

#include<iostream>

#include<algorithm>
#include<cstring>
#include<vector>
#include<cstdio>
#define MAXK 11

#define INF -0x7fffffff

using namespace std;

int d[1009];
struct sneak
{
    int c,w;
};
vector<sneak>s[100];

int main()
{
    //freopen("date.in","r",stdin);
    int N,V,K,i,j,k;
    int M,T;
    int O;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d %d",&K,&V);
        for(i=0; i<K; i++)
            s[i].clear();
        sneak t;
        for(i=0; i<K; i++)
        {
            scanf("%d",&O);
            for(int j = 0; j<O; j++)
            {
                scanf("%d %d",&t.c,&t.w);
                s[i].push_back(t);
            }
        }
        memset(d,0,sizeof(d));
        for(i=0; i<K; i++)//种类
            for(k=V; k>=1; k--)//体积
                for(j=0; j<s[i].size(); j++)//数量
                    if(k - s[i][j].c>=0)
                    d[k]=max(d[k],d[k-s[i][j].c]+s[i][j].w);
        printf("%d\n",d[V]);
    }
    return 0;
}

你可能感兴趣的:(湖南多校对抗赛(2015.05.10)(国防科大学校赛决赛-Semilive)E)