题目背景

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

题目描述

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

输入格式

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

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

输出格式

一个数,最大的利用价值。

输入输出样例

输入 #1复制

45 3
10 10 1
10 5 1
50 400 2

输出 #1复制

10

说明/提示

1≤m,n≤1000。

思路

开始的思路是,既然每组的物品互斥,那么每组物品就只保留容积最小或者价值最大的,最后再利用01背包的思路即可。但是,实际上这种做法并不严谨...。但是却AC了,就懒得管了......

 Code

#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int n,m,vans,wans,kmax;
struct nod{int w,v,k;
};
nod t;
int dp[N];
int v[N];//价值
int w[N];//体积
int main(){scanf("%d%d",&m,&n);fill(w+1,w+1+n,99999);wans=m;//总重量 for(int i=1;i<=n;i++){scanf("%d%d%d",&t.w,&t.v,&t.k);kmax=max(t.k,kmax);if(t.w<=m&&t.v>v[t.k]||t.w<w[t.k]) {//每组只保留价值最大的或者空间最小的 v[t.k]=t.v;w[t.k]=t.w;}}for(int i=1;i<=kmax;i++){for(int j=m;j>=w[i];j--){dp[j]=max(dp[j],dp[j-w[i]]+v[i]);}}printf("%d",dp[m]);
return 0;
}

再一个思路就是直接分组进行01背包枚举

Code 

#include<bits/stdc++.h>
using namespace std;
int v,n,t;
int x;
int g[205][205];
int i,j,k;
int w[10001],z[10001];
int b[10001];
int dp[10001];
int main(){cin>>v>>n;for(i=1;i<=n;i++){cin>>w[i]>>z[i]>>x;t=max(t,x);//找到最大组数b[x]++;//相应组数的物品数量++g[x][b[x]]=i;//记录第x组第b[x]个物品的下标为i}for(i=1;i<=t;i++){//枚举组for(j=v;j>=0;j--){//枚举体积for(k=1;k<=b[i];k++){//每组每一组的所有物品if(j>=w[g[i][k]]){//如果物品的容量合法dp[j]=max(dp[j],dp[j-w[g[i][k]]]+z[g[i][k]]);//那就更新}}}}cout<<dp[v];return 0;

洛谷 P1757 通天之分组背包 C++ dp相关推荐

  1. 洛谷 P1757 通天之分组背包

    P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...

  2. 洛谷P1757 通天之分组背包 [2017年4月计划 动态规划06]

    P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...

  3. 洛谷 p1757 通天之分组背包(哈希,分组背包)2021-08-12

    题目背景 直达通天路·小 A 历险记第二篇 题目描述 自 01 背包问世之后,小 A 对此深感兴趣.一天,小 A 去远游,却发现他的背包不同于 01 背包,他的物品大致可分为 k 组,每组中的物品相互 ...

  4. 洛谷P1757 通天之分组背包

    题目链接:点击进入 思路 分组背包,套板子 代码 #include<iostream> #include<string> #include<map> //#incl ...

  5. 【背包DP练习】洛谷 P5020货币系统 P1757通天之分组背包 P1064[NOIP2006 提高组]金明的预算方案 P5322 [BJOI2019]排兵布阵

    洛谷 P5020货币系统 https://www.luogu.com.cn/problem/P5020 思路是把货币从小到大排序,然后按顺序依次完全背包dp,每次dp检查i-1种面值的货币能不能凑出第 ...

  6. P1757 通天之分组背包

    P1757 通天之分组背包 背包中的经典问题,我竟然不知道. 分组背包 就是每个物品有一个所属的小组,小组内的物品会冲突. 就是把01背包中的两个for换一下位置 01: for(i,1,kind) ...

  7. P1757 通天之分组背包题解

    [题目链接] 洛谷P1757 [解题思路] 和题目名一样,本题就是一道分组背包的模板题,我来讲一下分组背包. 其实就是先将说有的数据按照题意分组,再做01背包即可. [CODE] #include&l ...

  8. 【题解】luogu P1757 通天之分组背包

    分组背包类型 总结: 1.先循环体积,再循环每组内的物品,保证每组物品内只选一次. 若调换位置,有可能每组内物品多选了. 2.num数组记录每组有多少个物品: belong数组记录每组物品的每一个物品 ...

  9. P1757 通天之分组背包(动态规划 分组背包)

    思路:这就是一个分组背包的模板题 #include <bits/stdc++.h> using namespace std; int v,n,t; int x,tot=0; int g[2 ...

最新文章

  1. 第十届四川省大学生程序设计竞赛
  2. V4L2框架分析学习二
  3. GCDPlot 0.31 发布
  4. How to think positively 如何培养正念
  5. 什么是DNS,A记录,子域名,CNAME别名,MX记录,TXT记录,SRV 记录,TTL值
  6. JavaScript使用技巧精萃 经典代码收藏版
  7. 程序路径查找 找到指定程序所在的目录
  8. 如何创建一个最小的串口、TTY设备包括虚拟控制台,串口以及伪终端设备的驱动程序
  9. B端+C端“两条腿走路”,左手医生欲建立医疗信息服务平台
  10. CV学习笔记-特征提取
  11. delphi 获取数组长度_C++可变长的数组,老司机手把手教你实现!
  12. rhcsa第二天笔记
  13. 苹果7闪存速度测试软件,iphone6 plus闪存检测教程 iphone6检测tlc闪存图文步骤
  14. 微软自带的FTP设置帐号
  15. Atitit 基于图片图像 与文档混合文件夹的分类
  16. 动态规划实战4-leetcode 5.Longest Palindromic Substring
  17. 热烈祝贺小明SEO博客网站正式上线
  18. 电脑CPU的最佳工作温度是多少度
  19. 比尔沃服务器位置,防辐射植物哪个更好?
  20. FastReport 金额大小写转换自定义函数

热门文章

  1. 批量删除多个 PDF 文档空白页
  2. [转]2014年最新810多套android源码2.46GB免费一次性打包下载
  3. python用opencv实现图片的美白磨皮_12 - OpenCV+TensorFlow 入门人工智能图像处理-磨皮美白-多智时代...
  4. Kotlin学习笔记12——数据类和密封类
  5. 升级Unity2018.3.2f1出现PrecompiledAssemblyException: Multiple precompiled assemblies with the same name
  6. 软件安全漏洞测试报告_现实生活中的软件安全漏洞以及如何确保安全
  7. vins estimator ProjectionFactor (Td) factor
  8. linux下批量修改前缀,Linux 中批量修改后缀名
  9. php实现登录验证码_PHP实现登录验证码功能
  10. 基于 Vue 实现 Excel 的解析与导出