题面

东东开车出去泡妞(在梦中),车内提供了 n 张CD唱片,已知东东开车的时间是 n 分钟,他该如何去选择唱片去消磨这无聊的时间呢
假设:
CD数量不超过20张
没有一张CD唱片超过 N 分钟
每张唱片只能听一次
唱片的播放长度为整数
N 也是整数
我们需要找到最能消磨时间的唱片数量,并按使用顺序输出答案(必须是听完唱片,不能有唱片没听完却到了下车时间的情况发生)
本题是 Special Judge

Input

多组输入
每行输入第一个数字N, 代表总时间,第二个数字 M 代表有 M 张唱片,后面紧跟 M 个数字,代表每张唱片的时长 例如样例一: N=5, M=3, 第一张唱片为 1 分钟, 第二张唱片 3 分钟, 第三张 4 分钟
所有数据均满足以下条件:
N≤10000
M≤20

Output

输出所有唱片的时长和总时长,具体输出格式见样例

Sample

Sample Input

5 3 1 3 4
10 4 9 8 4 2
20 4 10 5 7 4
90 8 10 23 1 2 3 4 5 7
45 8 4 10 44 43 12 9 8 2

Sample Output

1 4 sum:5
8 2 sum:10
10 5 4 sum:19
10 23 1 2 3 4 5 7 sum:55
4 10 12 9 8 2 sum:45

题解

本题要输出01背包的路径,这样的话需要二维数组记录过程:p[i][j]表示j容量的最优解是否选取了第i个物品,之后再递归到j-a[i]的容量是否选取了第i-1个物品…

代码

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<set>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define mem(a,s) memset(a,s,sizeof(a))
typedef long long LL;
const int M=1e4+10;
const int N=20+5;
int dp[M];
int p[N][M];
int a[N];
int n, L;
void output(int i,int l){if(i>1)output(i - 1, l - p[i][l]);if(p[i][l])cout << p[i][l] << ' ';
}
int main(){//    freopen("in.txt","r",stdin);while(cin>>L){mem(dp, 0);mem(p, 0);cin >> n;rep(i, 1, n)cin >>a[i];rep(i, 1, n) for (int j = L; j >= a[i];j--)if(dp[j]<=dp[j-a[i]]+a[i]){dp[j] = dp[j - a[i]] + a[i];p[i][j] = a[i];}output(n,L);cout << "sum:" << dp[L] << endl;}return 0;
}

【01背包记录路径】东东开车了相关推荐

  1. ☆【UVA - 624 】CD(dp + 0-1背包 + 记录路径)

    题干: You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music ...

  2. vijos 1071 01背包+输出路径

    描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:"这副牌少了几张!"众人一 ...

  3. Hrbust 1836 2012世界末日【01背包+反路径输出】

    2012世界末日 Time Limit: 1000 MS Memory Limit: 65535 K Total Submit: 38(16 users) Total Accepted: 12(11 ...

  4. 01背包输出路径、完全背包、多重背包

    背包问题 一.01 Knapsack(输出路径- >选的物品) 二.完全背包 1.三重循环,极可能TLE,滚动数组优化后j逆向枚举 2.二重,优化消去变量k(没有特别厘清,但可以直接从完全背包角 ...

  5. POJ 1293 - Duty Free Shop 01背包记录所选物品

    裸的01背包.dp[x]只要是bool型记录当前空间是否可用.. 而为了找到用了哪些物品..dp[x]设置为int型..进行记录.. Program: #include<iostream> ...

  6. 41 01背包 记录方案

    Problem IInstalling AppsTime limit: 2 seconds Mobile radio telephone, public domainSandra recently b ...

  7. (多重背包+记录路径)Charlie's Change (poj 1787)

    http://poj.org/problem?id=1787   描述 Charlie is a driver of Advanced Cargo Movement, Ltd. Charlie dri ...

  8. Bone Collector(骨头收集器) ---01背包 记录

    问题描述 多年前,在泰迪的家乡,有一个人叫"骨头收藏家".这个人喜欢收集各种各样的骨头,狗的,牛的,他也去坟墓了-- 收集骨头的人有一个V体积的大袋子,在他收集的过程中,骨头有很多 ...

  9. 【CCCC】L3-001 凑零钱 (30分),,01背包路径打印

    problem L3-001 凑零钱 (30分) 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 ...

最新文章

  1. 打造线下版元宇宙!机器人VR助力远程做核酸,登上Science子刊
  2. java fseek_转到C中的二进制文件的某个点(使用fseek),然后从该位置读取(使用fread)...
  3. python实现STM32单片机通信
  4. UC伯克利摘最佳论文、Hugging Face获最佳demo,EMNLP 2020奖项公布
  5. leetcode 442. Find All Duplicates in an Array | 442. 数组中重复的数据(位运算)
  6. DataFrame的多dtype创建方法
  7. 【渝粤教育】国家开放大学2019年春季 770房地产估价 参考试题
  8. AUTOSAR从入门到精通100讲(二)-SOME/IP及其应用
  9. GitHub的提醒邮件改进
  10. SIM900A高效完整的STM32代码
  11. 开发power apps canvas时用到的一些公式和小技能
  12. B站粉丝数显示器,播放数、获赞数失效解决。
  13. Hackintosh-OpenCore系列篇-Windows install
  14. iOS开发 宏定义,Pch文件的引入以及Header文件和Pch一起的使用方法(不用一直引入相同的头文件了,让你的开发更加快捷)
  15. 重庆轻工职业学院计算机期末考试,重庆轻工职业学院教务网络管理系统 http://183.230.5.161:8082,精英高考网...
  16. 数据结构实验(严蔚敏版)----栈与队列
  17. el-table 动态多级表头以及数据
  18. 基于ngx-rtmp-module模块http-flv直播流的实现
  19. Win10系统edge浏览器打不开怎么解决
  20. svn版本更迭的原理

热门文章

  1. 测试软件ipc,IPC整机测试工具 V1.0.0.4 官方版
  2. 海东市第一中学2021高考成绩查询,2021银川市地区高考成绩排名查询,银川市高考各高中成绩喜报榜单...
  3. Python基础语法函数——顺序与选择结构
  4. 百度飞桨全流程工具最新发布!零门槛 AI 开发平台全面升级
  5. python将图片转换为抽象画
  6. python写一个爬虫、爬取网站漫画信息_python爬取漫画
  7. verilog实现有符号数求绝对值
  8. [转] 程序员也要养生
  9. 西北乱跑娃 --- python图像基本操作
  10. VMware Workstation 12Pro安装步骤