湖南多校对抗赛(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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值