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): 3265    Accepted Submission(s): 1337
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.
1 4 6
2 5 7
3 4 99
1 55 77
2 44 66
//93MS 844K 1142 B C++
/* 题意:
有n双鞋子,m块钱,k种牌子,每双鞋子属于某个牌子,价格为b,价值为c,
现在问在满足在现有的金钱内买鞋,每个牌子的鞋最少有一双的情况下获得的最大价值,
不能满足则输出 Impossible 背包:
分组背包,并且每组至少一个。与传统的分组背包有点不同,难点是判断每组至少一个的
情况,此处采用标记法,先初始化 dp数组为-1,dp[0][0..V]为0,状态转移时判断前一状态
是否可行,可行在进行转移。 */
#include<iostream>
#include<vector>
using namespace std;
struct node{
int v;
int w;
node(int a,int b){
v=a;w=b;
}
};
vector<node>V[];
int dp[][];
int n,m,k;
int main(void)
{
int a,b,c;
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
memset(dp,-,sizeof(dp));
for(int i=;i<=m;i++) dp[][i]=; //初始化
for(int i=;i<=k;i++) V[i].clear();
for(int i=;i<n;i++){
scanf("%d%d%d",&a,&b,&c);
V[a].push_back(node(b,c));
}
for(int i=;i<=k;i++){
int n0=V[i].size();
for(int j=;j<n0;j++){
for(int v=m;v>=V[i][j].v;v--){
if(dp[i][v-V[i][j].v]!=-) //当前牌子转移状态
dp[i][v]=max(dp[i][v],dp[i][v-V[i][j].v]+V[i][j].w);
if(dp[i-][v-V[i][j].v]!=-) //前一牌字转移状态
dp[i][v]=max(dp[i][v],dp[i-][v-V[i][j].v]+V[i][j].w);
}
}
}
if(dp[k][m]==-) puts("Impossible");
else printf("%d\n",dp[k][m]);
}
return ;
}
hdu 3033 I love sneakers!(分组背包+每组至少选一个)的更多相关文章
- hdu 3033 I love sneakers! 分组背包
		
I love sneakers! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
 - HDU 3033 分组背包(至少选一个)
		
分组背包(至少选一个) 我真的搞不懂为什么,所以现在就只能当作是模板来用吧 如果有大牛看见 希望评论告诉我 &代码: #include <cstdio> #include < ...
 - HDU3033I love sneakers!(分组背包)
		
http://acm.hdu.edu.cn/showproblem.php?pid=3033 本题的意思就是说现在有n种牌子的鞋子,每种品牌有一些不同的鞋,每双鞋子都有一个特定的权值,现在要求每种品牌 ...
 - hdu3033 I love sneakers!        分组背包变形
		
分组背包要求每一组里面只能选一个,这个题目要求每一组里面至少选一个物品. dp[i, j] 表示前 i 组里面在每组至少放进一个物品的情况下,当花费 j 的时候,所得到的的最大价值.这个状态可以由三个 ...
 - 【hdu3033】分组背包(每组最少选一个)
		
[题意] 有S款运动鞋,一个n件,总钱数为m,求不超过总钱数且每款鞋子至少买一双的情况下,使价值最大.如果有一款买不到,就输出“Impossible". 1<=N<=100 1 ...
 - [HDU 3033] I love sneakers! (动态规划分组背包)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3033 题意:给你K种品牌,每种品牌有不同种鞋,现在每种品牌至少挑一款鞋,问获得的最大价值,如果不能每种 ...
 - HDU 3033 I love sneakers! 我爱运动鞋 (分组背包+01背包,变形)
		
题意: 有n<=100双鞋子,分别属于一个牌子,共k<=10个牌子.现有m<=10000钱,问每个牌子至少挑1双,能获得的最大价值是多少? 思路: 分组背包的变形,变成了相反的,每组 ...
 - I love sneakers!(分组背包HDU3033)
		
I love sneakers! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
 - HDU 4341 Gold miner (分组背包)
		
先把线按照距离原点的距离排序,然后用叉积把在同一条直线上的点放在一起, 把在同一条线上的点中的前i个点当成一个点就转化成了分组背包. 写if(kas++) putchar('\n') 居然PE了,PE ...
 
随机推荐
- 中间件kafka
			
* kafka----一个发布订阅消息系统,中间件:一个分布式.分区.可重复的日志服务kafka需要了解基础几层结构,生产者订阅者等使用方法,和在高并发.一致性场景使用.(凡事面试问一致性.高并发都脱 ...
 - QQ群排名霸屏技术居然是这样简单
			
最近做了一些收费的QQ群,收多少钱,一块钱的入门费,也就是说进入我的QQ群必须要1块钱的会费. 我的QQ群主要是干嘛呢,放些电影,比如说市面上电影院,正在播放的,最新最热门的,火爆的一些电影. 先前呢 ...
 - 微信小程序中无刷新修改
			
1.点击事件无刷新修改 原理:onload事件中是把这个分类和品牌的列表全部拿出来,拼接成数组的格式,在小程序中遍历的时候就要把小标(index)给绑定到左侧的品牌上,然后js中获取index的值,就 ...
 - 003---设计首页index页面
			
在项目的urls.py文件添加一条url from django.contrib import admin from django.urls import path, re_path from app ...
 - (数据科学学习手札35)tensorflow初体验
			
一.简介 TensorFlow时谷歌于2015年11月宣布在Github上开源的第二代分布式机器学习系统,目前仍处于快速开发迭代中,有大量的新功能新特性在陆续研发中: TensorFlow既是一个实现 ...
 - ABAP CDS ON HANA-(12)ODATA Service
			
Create a CDS view and we have the view type as ‘BASIC’ view To publish this as oData, add the annota ...
 - C++11中rvalue references的使用
			
Rvalue references are a feature of C++ that was added with the C++11 standard. The syntax of an rval ...
 - C++11中default的使用
			
In C++11, defaulted and deleted functions give you explicit control over whether the special member ...
 - PRO*C 函数事例 1 -- 数据库连接、事务处理
			
1.程序结构 每一个Pro*C程序都包括两部分:(1)应用程序首部:(2)应用程序体 应用程序首部定义了ORACLE数据库的有关变量, 为在C语言中操纵ORACLE数据库做 ...
 - 为什么说Objective-C是一门动态的语言?
			
object-c类的类型和数据变量的类型都是在运行是确定的,而不是在编译时确定.例如:多态特性,我们可以使用父类对象来指向子类对象,并且可以用来调用子类的方法.运行时(runtime)特性,我们可以动 ...