`

hdu 3033 I love sneakers!(分组背包:每组至少一个)

阅读更多

I love sneakers!

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 890    Accepted Submission(s): 381

Problem Description
After months of hard working, Iserlohn finally wins awesome amount of scholarship. As a great zealot of sneakers, he decides to spend all his money on them in a sneaker store.

There are several brands of sneakers that Iserlohn wants to collect, such as Air Jordan and Nike Pro. And each brand has released various products. For the reason that Iserlohn is definitely a sneaker-mania, he desires to buy at least one product for each brand.
Although the fixed price of each product has been labeled, Iserlohn sets values for each of them based on his own tendency. With handsome but limited money, he wants to maximize the total value of the shoes he is going to buy. Obviously, as a collector, he won’t buy the same product twice.
Now, Iserlohn needs you to help him find the best solution of his problem, which means to maximize the total value of the products he can buy.

 

Input
Input contains multiple test cases. Each test case begins with three integers 1<=N<=100 representing the total number of products, 1 <= M<= 10000 the money Iserlohn gets, and 1<=K<=10 representing the sneaker brands. The following N lines each represents a product with three positive integers 1<=a<=k, b and c, 0<=b,c<100000, meaning the brand’s number it belongs, the labeled price, and the value of this product. Process to End Of File.

 

Output
For each test case, print an integer which is the maximum total value of the sneakers that Iserlohn purchases. Print "Impossible" if Iserlohn's demands can’t be satisfied.

 

Sample Input
5 10000 3 1 4 6 2 5 7 3 4 99 1 55 77 2 44 66

 

Sample Output
255
 

         此题也是分组背包(每组至少放一个)!!!

      和普通的分组背包(每组至多放一个)不用,看了网上的解题报告,把后面两个循环调转一下就行,至于为什么,我也不知道怎么解释,直接套。

链接:http://acm.hdu.edu.cn/showproblem.php?pid=3033

代码:

#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;

const int INF = 99999999;

int max(int a, int b, int c)
{
    int M;
    M = a > b ? a : b;
    M = M > c ? M : c;
    return M;
}

int c[105], w[105], s[105];
int bag[15][10005];
int N, V, S;

void _gro_bag()
{
    int i, j, k;
    for(i = 1; i <= S; i++)
        for(j = 0; j <= V; j++)
            bag[i][j] = -INF;
    for(i = 1; i <= S; i++)
        for(k = 0; k < N; k++)
            for(j = V; j >= 0; j--)
                if(s[k] == i && j >= c[k])
                    bag[i][j] = max(bag[i][j], bag[i-1][j-c[k]]+w[k], bag[i][j-c[k]]+w[k]);
}

int main()
{
    int i;
    while(scanf("%d %d %d", &N, &V, &S) != EOF)
    {
        for(i = 0; i < N; i++)
            scanf("%d%d%d", &s[i], &c[i], &w[i]);
        _gro_bag();
        if(bag[S][V] < 0) printf("Impossible\n");
        else printf("%d\n", bag[S][V]);
    }

    return 0;
}

 

0
13
分享到:
评论

相关推荐

    (HDUACM201303版_07)背包专题

    杭电ACM课件2014版之 (HDUACM201303版_07)背包专题

    hdu1250高精度加法

    本题(hdu1250)主要考察的就是如何通过编程实现高精度加法,并解决一个特定的数学问题。 #### 题目解析 根据题目描述,该题目编号为HDU1250,其核心在于利用高精度加法解决问题。具体地,题目涉及到了斐波那契数列...

    HDU题目java实现

    HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案。这里的“java实现”意味着作者使用Java作为编程工具来解答这些算法题。 在Java编程方面,以下是一些可能涵盖的知识点: 1. ...

    hdu 1257 最低拦截系统 lis

    题目名为“hdu 1257 最低拦截系统”,这里的“最低拦截系统”实际上是描述了一个问题场景,而具体的问题通过描述部分可以得知是要求找出给定数组中的最长递增子序列的长度。这里所谓的“最低拦截系统”可能是为了...

    hdu.rar_hdu

    因此,“朝花夕拾——hdu”可能是一个包含多个子目录或文件的结构,每个对应一个不同的HDU题目。例如,你可能会看到类似于“HDU1001.cpp”或“HDU2345.py”的文件,它们分别代表了用C++或Python编写的解决特定题目的...

    hdu动态规划算法集锦

    动态规划的关键在于确定状态转移方程,即如何从前一个或前几个状态转移到当前状态。 ### 知识点详解 #### Robberies (抢劫) 题目链接:[Robberies](http://acm.hdu.edu.cn/showproblem.php?pid=2955) - **问题...

    HDU 1022 Train Problem I 附详细思路

    HDU 1022 Train Problem I 附详细思路

    ACM HDU

    【标签】"ACM题解 HDU"意味着这是一个关于如何解答HDU ACM题目的资源,可能包含了解题思路、算法解析、代码实现等方面的内容。这样的资料对于准备ACM比赛的选手或者希望提升算法能力的程序员来说非常有价值。 在...

    HDU DP动态规划

    总的来说,"HDU DP动态规划"是一个关于使用动态规划解决HDU平台上某一题目的主题,它要求掌握动态规划的基本概念、方法,并能灵活应用到实际问题中,同时可能涉及到文件交互和调试,以完成问题的求解。

    背包问题模板 hdu2191

    背包问题是计算机科学中一种经典的NP完全问题,它是指给定一个容量为V的背包和N种物品,每种物品具有价值和重量,如何选择物品放入背包,使得总价值最大化且总重量不超过背包容量。背包问题有多种变形,包括0/1背包...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

    解题代码 hdu1241

    - **搜索过程**:对于每一个 `'@'` 位置,进行一次DFS搜索,并统计岛屿的数量。 #### 四、应用场景与扩展 - **应用场景**:此算法适用于寻找地图上的连通区域(例如岛屿),并计算连通区域的数量。 - **扩展应用**...

    HDU_软工_计组实验1~8

    总的来说,"HDU_软工_计组实验1~8"是一个全面的实践教学资源,涵盖了计算机组织的关键知识点,通过实际操作帮助学生深化理解并提升技能。对于想要深入理解计算机硬件运作和系统级别的软件开发的学生来说,这是一个...

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    hdu1290解题报告

    题目要求计算当在一个球体(本题中的蛋糕)上切割 _n_ 刀时(每一刀都是一个平面),最多可以将球体分割成多少个部分。这里的每一刀都假设是理想情况下的切割,即每一切割都是一个完美的平面,并且这些平面不会相互...

    杭电ACMhdu1163

    【标签】:“杭电”代表题目来源于杭州电子科技大学,是ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest, ICPC)比赛的一个平台,提供了许多供学生练习和参赛的题目。"ACM"是此类竞赛的...

    HDU图论题目分类

    HDU图论题目分类提供了一个系统化的图论知识框架,帮助开发者和研究者更好地理解和掌握图论的基本概念和技术。 以下是HDU图论题目分类中的部分知识点: 1. 图的基本概念:图的定义、图的表示、图的遍历、图的搜索...

    ACM HDU题目分类

    ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。...ACM HDU 题目分类是一个非常重要的参考资源,对于编程选手来说,掌握这些分类可以帮助他们更好地理解和解决问题。

    ACM hdu 代码大全3000例,部分代码有详细解析

    每一个代码实例都是一个珍贵的学习素材,它们不仅是解决问题的答案,更是思路和方法的体现。部分代码还附带了详细解析,对关键步骤进行解释,有助于读者深入理解算法背后的逻辑。 1. 数据结构篇: - 链表:用于...

    hdu acm 教案(3)

    4. **状态转移方程**:这是动态规划的核心,它描述了从一个状态到另一个状态的转换过程,通常用一个递推公式表示。例如,斐波那契数列的状态转移方程为F(n) = F(n-1) + F(n-2)。 5. **记忆化搜索**:这是动态规划的...

Global site tag (gtag.js) - Google Analytics