洛谷——P1757 通天之分组背包

https://www.luogu.org/problem/show?pid=1757#sub

题目背景

直达通天路·小A历险记第二篇

题目描述

自01背包问世之后,小A对此深感兴趣。一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少。

输入输出格式

输入格式:

两个数m,n,表示一共有n件物品,总重量为m

接下来n行,每行3个数ai,bi,ci,表示物品的重量,利用价值,所属组数

输出格式:

一个数,最大的利用价值

输入输出样例

输入样例#1:

input: 45 4
        10 10 1
        10 5 1
        5 20 2
        50 400 2

输出样例#1:

output:30

说明

1<=m<=1000 1<=n<=1000 组数t<=100

裸地分组背包

 1 #include <algorithm>
 2 #include <cstdio>
 3
 4 using namespace std;
 5
 6 int m,n,x,y,num,max_num;
 7 int a[10005],w[1015][1015],val[1015][1015];
 8 int f[10105];
 9
10 int main()
11 {
12     scanf("%d%d",&m,&n);
13     for(int i=1;i<=n;i++)
14     {
15         scanf("%d%d%d",&x,&y,&num);
16         max_num=max(max_num,num);
17         a[num]++;
18         w[num][a[num]]=x;
19         val[num][a[num]]=y;
20     }
21     for(int i=1;i<=max_num;i++)
22         for(int k=m;k>0;k--)
23             for(int j=1;j<=a[i];j++)
24             if(k-w[i][j]>=0)
25             f[k]=max(f[k],f[k-w[i][j]]+val[i][j]);
26     printf("%d",f[m]);
27     return 0;
28 }
时间: 2024-08-10 17:08:57

洛谷——P1757 通天之分组背包的相关文章

洛谷 P1757 通天之分组背包 【分组背包】

题目链接:https://www.luogu.org/problemnew/show/P1757#sub 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少. 输入输出格式 输入格式: 两个数m,n,表示一共有n件物品,总重量为m 接下来n行,每行3个数ai,bi,ci,表示物品的重量,利用价值,所属组数 输出格式: 一个数,最大的利用价值 输入输出样例 输入样例#1:

P1757 通天之分组背包

----------------- 链接:Miku ----------------- 分组背包,我们只需要在01背包的基础上稍加修改,把同一类的物品同时枚举即可. ----------------- #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,m; struct th{ int v; int w; i

dp--分组背包 P1757 通天之分组背包

题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少. 输入格式 两个数m,n,表示一共有n件物品,总重量为m 接下来n行,每行3个数ai,bi,ci,表示物品的重量,利用价值,所属组数 输出格式 一个数,最大的利用价值 有容积为V的背包,有n件物品,每种物品属于的组别不同,t为最大的组数,每组中的物品相互冲突,所以只能选其中一件 接

分组背包(通天之分组背包)

分组背包是01背包的变形. 所解决的问题是,在多类物品中的每一类选出一个物品,在有限的容量内获得最大价值. 所注意的是3重for的顺序.在这里其实不用多讲,只要明白递归就可以了. 建议搜分组背包的博客,其实只要记住最后才是每一类中放还是不放物品即可. 例题: 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少. 输入

【基础练习】【背包DP】洛谷1164 小A点菜题解

洛谷的题目又有那令人···的悲剧格式= = 洛谷1164 小A点菜 本题地址:http://www.luogu.org/problem/show?pid=1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过uim由于买了一些辅(e)辅(ro)书,口袋里只剩M元(M<=10000). 餐馆虽低端,但是菜品种类不少,有N种(N<=100),第i种

【日常学习】【背包DP(完全背包)】洛谷1616 疯狂的采药题解

这是一道典型的完全背包题目 先上题目···于是又要迎来洛谷那令人不知道说什么的霸气摘要··· 洛谷1616 疯狂的采药 本题地址:http://www.luogu.org/problem/show?pid=1616 题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞

分组背包及树上分组背包

分组背包是说有n组物品 每个组别只能选一个 体积限制V 的最大价值w 二维: //f[i][j] 表示 前i组体积为j的最大价值 for(int i=1;i<=N;i++) //组别 for(int k=1;k<=n[i];k++) //每个物品 for(int j=V;j>=0;j--) //体积 f[i][j]=max(f[i][j],f[i-1][j-v[i][k]]+w[i][k]); 一维: //f[i]表示重量为i时的最大价值 for(int i=1;i<=n;i++)

二维费用,依赖,分组背包

二维费用背包 01背包进阶版 有N件物品和一个空间容量为C,重量容量为W的背包,第 i 件物品的空间费用为c[i] ,重量费用为 wi,价值是 vi,每种物品仅有一件,可以选择放或不放,求将哪些物品装入背包可使价值总和最大 01背包: f[i][j]=max(f[i?1][j],f[i?1][j?w[i]]+v[i]) 空间降维写法 for (int i = 1; i <= n; i++) for (int j = V; j >= w[i]; j--) f[j] = max(f[j], f[j

洛谷P3045 [USACO12FEB]牛券Cow Coupons

P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 86分求救 题目描述 Farmer John needs new cows! There are N cows for sale (1 <= N <= 50,000), and FJ has to spend no more than his budget