01背包记录路径 (例题 L3-001 凑零钱 (30分))

题意:
就是找出来一个字典序最小的硬币集合,且这个硬币集合里面所有硬币的值的和等于题目中的M
题解:
01背包加一下记录路径,如果1硬币不止一个,那我们也不采用多重背包的方式,把每一个1硬币当成一个独立的单位来进行01背包dp
但是我们知道背包dp的路径可能不止一条,而我们要从中得到字典序最小的序列,我的代码中两次不同的排序会得到最大/小字典序
降序 == 最小字典序
升序 == 最大字典序
1 #include<iostream>
2 #include<queue>
3 #include<vector>
4 #include<string.h>
5 #include<stdio.h>
6 #include<algorithm>
7 using namespace std;
8 typedef long long ll;
9 const int maxn=5e4+10;
10 const int N=1e4+10;
11 int v[N];
12 int vv[N];
13 int dp[N];
14 bool pre[N][105];
15 int main()
16 {
17 int m,n;
18 scanf("%d%d",&n,&m);
19 for(int i=1; i<=n; i++)
20 {
21 scanf("%d",&v[i]);
22 }
23 sort(v+1,v+n+1); //从大到小排序那么答案输出就是最小字典序,如果是从小到大排序,那么答案输出
24 //就是最大字典序(这就是结论),greater<int>()
25 memset(dp,0,sizeof(dp));
26 memset(pre,0,sizeof(pre));
27 for(int i=1; i<=n; i++)
28 {
29 for(int j=m; j>=v[i]; j--)
30 {
31 if(dp[j]<=dp[j-v[i]]+v[i])
32 {
33 dp[j]=dp[j-v[i]]+v[i];
34 pre[i][j]=1;//如果第i个歌曲被放进背包,,标记当前背包的位置,记录路径;
35 }
36 }
37 }
38 if(dp[m]!=m)
39 {
40 printf("No Solution\n");
41 return 0;
42 }
43 int i=n,j=m,flag=0; //这里的初赋值可不能随意改(控制输出最后最大/小字典序就是sort排序和这里,至于为什么可以画一下图)
44 while(i>=1&&j>=0)
45 {
46 if(pre[i][j])
47 {
48 if(!flag)
49 printf("%d",v[i]),flag=1;
50 else printf(" %d",v[i]);
51 j=j-v[i];//第i张歌曲放在了第当背包容量为j-v[i]时,下一步找第i-1张歌曲.(由此的来dp[j]=dp[j-v[i]]+v[i];)
52 }
53 i--;
54 }
55 return 0;
56 }
我对多重背包记录路径和完全背包记录路径
1、对于多重背包记录路径
第一种方法就是像这一道题一样,把多重背包当作01背包来写,但是这样时间复杂度肯定高
2、完全背包都不限制数量了,那记录路径就没有意义了
01背包记录路径 (例题 L3-001 凑零钱 (30分))的更多相关文章
- UVA624(01背包记录路径)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- HDU 6083 度度熊的午饭时光(01背包+记录路径)
http://acm.hdu.edu.cn/showproblem.php?pid=6083 题意: 思路: 01背包+路径记录. 题目有点坑,我一开始逆序枚举菜品,然后一直WA,可能这样的话路径记录 ...
- 牛客网暑期ACM多校训练营(第三场) A PACM Team 01背包 记录路径
链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 Eddy was a contestant participating in ACM ICPC ...
- UVA 624(01背包记录路径)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Atcoder Beginner Contest145E(01背包记录路径)
#define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int a[3007],b[3007];int ...
- Codeforces Gym-102219 2019 ICPC Malaysia National E. Optimal Slots(01背包+输出路径)
题意:给你一个体积为\(T\)的背包,有\(n\)个物品,每个物品的价值和体积都是是\(a_{i}\),求放哪几个物品使得总价值最大,输出它们,并且输出价值的最大值. 题解:其实就是一个01背包输出路 ...
- 天梯赛L3-001. 凑零钱(01背包记录物品)
L3-001. 凑零钱 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现 ...
- vijos 1071 01背包+输出路径
描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:“这副牌少了几张!”众人一数,果然是少了.于是 ...
- poj1417 带权并查集 + 背包 + 记录路径
True Liars Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2713 Accepted: 868 Descrip ...
随机推荐
- ptgmk
num >= 1125899906842624 ? "P" \ : num >= 1099511627776 ? "T" \ : num >= ...
- CTFshow萌新赛-千字文
打开靶机 下载完成后,为一张二维码图片 使用StegSolve 解出隐写图像 保存后使用PS或其他工具去除白边 然后使用脚本分割这个图像(25*25) from PIL import Image im ...
- 大数据系列1:一文初识Hdfs
最近有位同事经常问一些Hadoop的东西,特别是Hdfs的一些细节,有些记得不清楚,所以趁机整理一波. 会按下面的大纲进行整理: 简单介绍Hdfs 简单介绍Hdfs读写流程 介绍Hdfs HA实现方式 ...
- 网络可视化工具netron详细安装流程
1.netron 简介 在实际的项目中,经过会遇到各种网络模型,需要我们快速去了解网络结构.如果单纯的去看模型文件,脑海中很难直观的浮现网络的架构. 这时,就可以使用netron可视化工具,可以清晰的 ...
- PCB导线长宽与电源压降
为了计算PCB中电源线走线后的压降,需要知道PCB中使用的铜的电阻率, PCB板中的铜是直接贴上去的铜箔,因此可以当成纯铜(我问了PCB打样的厂家他们的铜的电阻率,但是他们给我说不知道,所以干脆就当成 ...
- 事件循环Event loop到底是什么
摘要:本文通过结合官方文档MDN和其他博客深入解析浏览器的事件循环机制,而NodeJS有另一套事件循环机制,不在本文讨论范围中.process.nextTick和setImmediate是NodeJS ...
- 前端工程构建之谈:gulp3要不要升级到Gulp4
关于升级还是不升级,这是一个哲学问题. gulp4的语法更加现代,支持ES6的大部分写法,使用exports的方式去暴露任务组合,更加灵活和便捷. gulp4同时也提供了很多强大的API,例如para ...
- Ajax编程基础
目录 Ajax编程基础 传统网站中存在的问题 Ajax概述 Ajax的应用场景 Ajax的运行环境 Ajax运行原理及实现 Ajax运行原理 Ajax的实现步骤 1.创建Ajax对象 2.告诉Ajax ...
- Android N selectQualifiedNetwork分析
前言: 参考:Android N wifi auto connect流程分析 后续 Android 8.0/9.0 wifi 自动连接评分机制 分析 前面说了,handleScanResults会去调 ...
- token的分层图如下
基于 token 的多平台身份认证架构设