hdu 3033 I love sneakers! 分组背包】的更多相关文章

I love sneakers! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description After months of hard working, Iserlohn finally wins awesome amount of scholarship. As a great zealot of sneakers, he decides to s…
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 Problem Description After months of hard working, Iserlohn finally wins awesome amount of sc…
题意: 有n<=100双鞋子,分别属于一个牌子,共k<=10个牌子.现有m<=10000钱,问每个牌子至少挑1双,能获得的最大价值是多少? 思路: 分组背包的变形,变成了相反的,每组物品至少挑1件(分组背包问题是至多挑1件). 由于每个牌子至少买1双,那么可以先装一件最便宜的进去,如果有好的再更新(注意每次的容量下限).而且同一双鞋子不能多次购买,这里要用01背包.对于当前容量cap,可能只装了某一牌子的一双鞋子(不一定最便宜),也可能装了多双,也可能只装了那双硬塞进去的最便宜的. 注意…
http://acm.hdu.edu.cn/showproblem.php?pid=3033 本题的意思就是说现在有n种牌子的鞋子,每种品牌有一些不同的鞋,每双鞋子都有一个特定的权值,现在要求每种品牌的鞋子都至少收集一双,有一定量的钱,问获得的最大的权值是多少. 这个题与普通的分组背包不同就在于每一组都至少选一个,(正好这个难道我了= =) 网上找了解题报告,解题方法很巧妙,就是先将每一个DP值初始化为一个值,比如-1,表示所有的状态都不合法 那么转移方程就是 ) DP[i][k] = max(…
I love sneakers! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4602    Accepted Submission(s): 1893 Problem Description After months of hard working, Iserlohn finally wins awesome amount of s…
分组背包要求每一组里面只能选一个,这个题目要求每一组里面至少选一个物品. dp[i, j] 表示前 i 组里面在每组至少放进一个物品的情况下,当花费 j 的时候,所得到的的最大价值.这个状态可以由三个状态转移过来: dp[i-1, v-a[i,j].b] 表示第 i 组没有放过,将要放进第 i 组里面的第 j 个物品 dp[i, v-a[i,j].b] 表示第 i 组已经放过了,将要放进第 i 组里面的第 j 个物品 dp[i, j] 表示第 i 中已经放过了,不放第 i 组里面的第 j 个物品…
先把线按照距离原点的距离排序,然后用叉积把在同一条直线上的点放在一起, 把在同一条线上的点中的前i个点当成一个点就转化成了分组背包. 写if(kas++) putchar('\n') 居然PE了,PE选手 #include<bits/stdc++.h> using namespace std; int N,T; ; ; struct Point { int x,y,t,v; }P[maxn]; bool vis[maxn]; vector<int> Line[maxn]; int…
题目链接 Gold miner 目标是要在规定时间内获得的价值总和要尽可能大. 我们先用并查集把斜率相同的物品分在同一个组. 这些组里的物品按照y坐标的大小升序排序. 如果组内的一个物品被选取了,那该组排在他前面的所有物品肯定被选取了. 那么我们对每个组的所有物品,对价值和代价分别求前缀和. 那么选了3号,就相当于选了1,2,3号. 这个时候问题就转化为分组背包了. 也就是说把物品转换后,这个组内我最多只能选1个物品. 然后就很简单了. #include <bits/stdc++.h> usi…
这个题很怪,一开始没仔细读题,写了个简单的分组背包交上去,果不其然WA. 题目分析: 分组背包问题是这样描述的:有K组物品,每组 i 个,费用分别为Ci ,价值为Vi,每组物品是互斥的,只能取一个或者不取(最多取一个),求在一定背包容量V的情况下,能够获得的最大价值. 而这个题是,他每个牌子的鞋最少会买一双,但不会买一个牌子同款的两次. 也就是说如果将每个牌子分成一组,那么在每组里面要至少取一双,所以这更像是在每组里面进行01背包. 普通的分组背包的三层循环是: ; k<K; k++) ; v-…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3033 题意:给你K种品牌,每种品牌有不同种鞋,现在每种品牌至少挑一款鞋,问获得的最大价值,如果不能每种品牌都挑到则输出Impossible 自己太弱了!!!!!这个题都想不出来!!!!!还要看题解!!!!!! 设计状态dp[i][j]代表从前i种品牌里花了不超过j元钱. 那么状态转移可以这样: 1.我只买第i种品牌的第k个. 2.我在第i种品牌里不光买第k个. 变成状态转移方程就是: 1. dp[i…