AcWing 9. 分组背包问题】的更多相关文章

#include <iostream> #include <algorithm> using namespace std; ; int n, m; int v[N][N], w[N][N], s[N]; int f[N]; int main() { cin >> n >> m; ; i <= n; i ++ ) { cin >> s[i]; ; j < s[i]; j ++ ) cin >> v[i][j] >>…
ACboy needs your help Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 4   Accepted Submission(s) : 1 Problem Description ACboy has N courses this term, and he plans to spend at most M days on stu…
Description ACboy has N courses this term, and he plans to spend at most M days on study.Of course,the profit he will gain from different course depending on the days he spend on it.How to arrange the M days for the N courses to maximize the profit? …
//f[i,j] 所有只从前i块能量石中选,且总体积恰好为j的方案数 #include <iostream> #include <algorithm> #include <cstring> using namespace std; , M = ; int n; struct Stone { int s, e, l; } stones[N]; bool cmp(Stone a, Stone b) { return a.s * b.l < b.s * a.l;//要写…
#include<iostream> #include<algorithm> #include<cstring> using namespace std ; ; int f[N],g[N],q[N]; int n,m; int a[N]; int main() { cin>>n>>m; ; i<=n; i++) { int v,w,s; cin>>v>>w>>s; ) { //完全背包 for(int j…
//二进制优化 最后变为01背包 #include <iostream> #include <algorithm> using namespace std; , M = ; int n, m; int v[N], w[N]; int f[M]; int main() { cin >> n >> m; ; ; i <= n; i ++ ) { int a, b, s; cin >> a >> b >> s; ; whi…
朴素 #include<iostream> #include<algorithm> using namespace std ; ; int n,m; int v[N],w[N]; int f[N][N]; int main() { cin>>n>>m;//n个物品 最大体积位m ; i<=n; i++) cin>>v[i]>>w[i]; ; i<=n; i++) ; j<=m; j++) ; k*v[i]<=j…
朴素 数据范围小 //数据范围小 #include<iostream> #include<algorithm> using namespace std ; ; int n,m; int v[N],w[N],s[N]; int f[N][N]; int main() { cin>>n>>m; ; i<=n; i++) cin>>v[i]>>w[i]>>s[i]; ; i<=n; i++) ; j<=m; j…
朴素 //朴素二维 #include <iostream> #include <algorithm> using namespace std; ; int n, m; int v[N], w[N]; int f[N][N]; int main() { cin >> n >> m; ; i <= n; i ++ ) cin >> v[i] >> w[i]; ; i<=n; i++)//装的个数 ; j<=m; j++)…
多重背包 有 n种物品 一共有 m大小的背包,每种物品的价值 大小 个数 为 s[i],v[i],num[i]; #include<bits/stdc++.h>//cmhao #define N 100000 using namespace std; int a[N]; int n,m,cut; int s[N],v[N]; void change(int tj,int jz,int sl) { int q=1,x,y; while(sl) { if(sl%2) { cut++; x=tj*q…
有\(N\)组物品和一个容量是\(V\)的背包. 每组物品有若干个,同一组内的物品最多只能选一个. 每件物品的体积是\(v_{ij}\),价值是\(w_{ij}\),其中\(i\)是组号,\(j\)是组内编号. 求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大. 输出最大价值. 输入格式 第一行有两个整数\(N\),\(V\),用空格隔开,分别表示物品组数和背包容量. 接下来有\(N\)组数据: 每组数据第一行有一个整数\(S_i\),表示第\(i\)个物品组的物品数量: 每组…
I love sneakers! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4464    Accepted Submission(s): 1824 Problem Description After months of hard working, Iserlohn finally wins awesome amount of sc…
1750. 运动会 限制条件 时间限制: 1 秒, 内存限制: 32 兆 题目描述 ZEH是一名04级的学生,他除了绩点高,还有运动细胞.有一次学院举办运动会,ZEH发现里面的 项目都是他所向披靡的,当然他想获得所有项目的No1,但是一个人的精力总是有限的,ZEH也是只有P(Power的简写,一个大于0且小于1000的整 数)的精力.如果精力足够参加比赛,一定能赢:相反,精力不够去参加比赛,Loss的概率很大,ZEH当然不想因为Loss而不爽. 整个运动会有N(大于0且小于等于100)项比赛,每…
题目链接:http://codeforces.com/problemset/problem/148/E 题目大意:有n组数据,每次可以从任意一组的两端取出1个数,问你取m个数最大能组成多少? 思路:先将这n组数据变成每组内选i个最大能取到多少,就是合成若干个物品,然后就是分组背包问题. 分组背包: 问题有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].这些物品被划分为若干组,每组中的物品互相冲突,最多选一件.求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 ACboy needs your help Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3045    Accepted Submission(s): 1581 Problem Description ACboy has N cou…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 分析: 典型的分组背包问题,如果不会的可以看一下背包九讲. 看下背包九讲中的描述: for 所有的组k                    forv=V..0                       for 所有的i属于组k                           f[v]=max{f[v],f[v-c[i]]+w[i]} 组别肯定是课程,体积就是天数,故我的代码: for…
<题目链接> 题目大意:有n个课程,现在花M天来学习这些课程,学习每个课程花的天数所得到的价值不同,求M天怎么分配学习才能得到的价值最大.(这些课程得到的价值和所花天数的关系由矩阵给出) 解题分析:这是一个很明显的分组背包问题,将某一门课程花m个不同天数能够得到不同的价值看成是m个有各自花费和价值的物品,然后,又因为根据题意,每一门课程都只能选择一种花费的天数,于是,这道题就被很自然的转化为分组背包问题. #include <bits/stdc++.h> using namespa…
题目链接:Timetable 题意:Ivan是一个学生,在一个Berland周内要上n天课,每天最多会有m节,他能逃课的最大数量是k.求他在学校的时间最小是多少? 题解:先把每天逃课x节在学校呆的最小时间预处理出来,这样就变成了在n天里面,每个组有不同的情况,找出逃课t节的能在学校呆最小时间的情况.就是一个分组背包问题了. #include<bits/stdc++.h> using namespace std; ; ; int N,M,T,S; int num[MAX_N]; int pos[…
I love sneakers! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4919    Accepted Submission(s): 2022 Problem Description After months of hard working, Iserlohn finally wins awesome amount of sc…
这个题,乍一看感觉挺神的(其实真挺神的),其实是个简单的分组背包(如果恍然大悟就不用接着看了) 取连续的一段是这道题最难以处理的地方,但是观察到物品数量不多<=100(如果恍然大悟就不用接着看了) 不妨把连续取物转化为单个物品,就是说,我们取一段连续物品求和作为一个物品,这样,我们只要满足每组选一个(或不选), 然后这道题就转化为了一个简单的分组背包问题,我们只要通过可行性DP解决就好 #include<iostream> #include<cstdio> using nam…
题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从转播站到所有用户终端的信号传输费用都是已知的,一场转播的总费用等于传输信号的费用总和. 现在每个用户都准备了一笔费用想观看这场精彩的足球比赛,有线电视网有权决定给哪些用户提供信号而不给哪些用户提供信号. 写一个程序找出一个方案使得有线电视网在不亏本的情况下使观看转播的用户尽可能多. 输入输出格式 输…
分组背包问题:有N件物品和一个容量为V的背包.第i件物品的体积是c[i],价值是w[i].这些物品被划分为若干组,每组中的物品互相冲突,最多选一件.求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大. 题意: 要用m天的时间来学n门课程,给出一个v[n][m]的矩阵,v[i][j]代表的是花j天的时间学习第i门课程所获得的价值,求能获得的最大价值?(当然同一门课不可多次修读) 思路: 很裸的分组背包.有点类似于01背包,那就转成01背包的思想. 第1层循环是“组”,第2层…
题意: 有n<=100双鞋子,分别属于一个牌子,共k<=10个牌子.现有m<=10000钱,问每个牌子至少挑1双,能获得的最大价值是多少? 思路: 分组背包的变形,变成了相反的,每组物品至少挑1件(分组背包问题是至多挑1件). 由于每个牌子至少买1双,那么可以先装一件最便宜的进去,如果有好的再更新(注意每次的容量下限).而且同一双鞋子不能多次购买,这里要用01背包.对于当前容量cap,可能只装了某一牌子的一双鞋子(不一定最便宜),也可能装了多双,也可能只装了那双硬塞进去的最便宜的. 注意…
题目传送门 题意:有n个金矿,每个金矿有抓取的消耗的时间和价值,矿工在原点,问在T时间内能得到的最大的价值 分析:唯一和01背包不同的是金矿可能共线,也就是抓取近的金矿后才能抓后面共线的金矿.这是分组背包问题,方法是将点按照斜率排序,如果相等按照距离原点远近排序,将斜率相等的点分成一组,每组的点累加上前面的点的时间和价值,这样每组只选一个点,就是01背包了 收获:分组背包问题 代码: /************************************************ * Auth…
这个题很怪,一开始没仔细读题,写了个简单的分组背包交上去,果不其然WA. 题目分析: 分组背包问题是这样描述的:有K组物品,每组 i 个,费用分别为Ci ,价值为Vi,每组物品是互斥的,只能取一个或者不取(最多取一个),求在一定背包容量V的情况下,能够获得的最大价值. 而这个题是,他每个牌子的鞋最少会买一双,但不会买一个牌子同款的两次. 也就是说如果将每个牌子分成一组,那么在每组里面要至少取一双,所以这更像是在每组里面进行01背包. 普通的分组背包的三层循环是: ; k<K; k++) ; v-…
抽空看了一段时间的粒子群算法,这里仅针对其应用于动态规划中的背包问题的情况做下总结归纳,其他应用可以之后想到了再添加. 一:分组背包问题简介 假设有3个组,每组有2个物品,每种物品有3种属性,价值.体积和重量.我们只有1个背包,从每组中选择1个物品(可以不选的情况第三章讨论)装入背包中,如何选择才能使背包中的物品总价值最大.总体积最小.且不超过规定重量呢? 物品/分组 第一组 第二组 第三组 物品1价值 1 2 3 物品2价值 3 2 1 物品/分组 第一组 第二组 第三组 物品1体积 1 2…
01背包问题     朴素版:(二维数组) 状态表示: dp[i][j]:从前i个物品中选择(每个物品只能选0或1个)且总体积不超过j的集合的最大价值,则dp[n][m]就是最终答案(n:物品数量,m:最大体积) 状态计算: dp[i][j] = max ( dp[i-1][j] , dp[i-1][j-vi]+wi )  // 由含i和不含i两个子集合计算而来(vi:物品体积,wi:物品价值) 核心代码: int n, m; // n:物品数量, m:最大体积 int v[N], w[N],…
★.背包求方案数的时候,多重背包是不行的,因为产生重复的背包会有多种情况. ★.背包记录路径的时候,其实是不行的,因为更新了12的最优解,如果它依赖于6这个背包,然后你后面改变了6这个背包,就GG 1.01背包问题. tot:总背包空间,vall[i]:每件物品的价值,w[i]:每件物品的重量 http://acm.hdu.edu.cn/showproblem.php?pid=2602 01背包明显可以只写一维的,所以二维的就不写了. 关于为什么可以只写一维的呢?这就和你枚举的顺序有关了.从to…
动态规划作为一种求解最优方案的思想,和递归.二分.贪心等基础的思想一样,其实都融入到了很多数论.图论.数据结构等具体的算法当中,那么这篇文章,我们就讨论将图论中的树结构和动态规划的结合——树形dp. 其实如果看过<背包九讲>或者看过笔者的文章<动态规划——背包问题>的读者会对树形dp有一定的了解,下面引用笔者在<动态规划——背包问题>中一个一段. “ 依赖背包问题的模型很简单,就是说对于某个物体,将它装入背包必须以装入一个物体做前提.这其实十分类似我们上文提到的分组背包…
A题 题目大意:给出一棵树,一开始节点值均为0,先要求完成在线操作:将某子树所有节点值取反,或者查询某子树总点权. 题解:很基础的线段树题,既然两个操作都是子树操作,那么就先树链剖分一下,将子树操作转变成线段树上的区间操作,区间翻转操作就等同于区间长度减去区间总权值,码量适中,水过. #include <cstdio> #include <algorithm> #include <climits> #include <cstring> using names…