vijos 1071 01背包+输出路径
描述
过年的时候,大人们最喜欢的活动,就是打牌了。xiaomengxian不会打牌,只好坐在一边看着。
这天,正当一群人打牌打得起劲的时候,突然有人喊道:“这副牌少了几张!”众人一数,果然是少了。于是这副牌的主人得意地说:“这是一幅特制的牌,我知道整副牌每一张的重量。只要我们称一下剩下的牌的总重量,就能知道少了哪些牌了。”大家都觉得这个办法不错,于是称出剩下的牌的总重量,开始计算少了哪些牌。由于数据量比较大,过了不久,大家都算得头晕了。
这时,xiaomengxian大声说:“你们看我的吧!”于是他拿出笔记本电脑,编出了一个程序,很快就把缺少的牌找了出来。
如果是你遇到了这样的情况呢?你能办到同样的事情吗?
格式
输入格式
第一行一个整数TotalW,表示剩下的牌的总重量。
第二行一个整数N(1<N<=100),表示这副牌有多少张。
接下来N行,每行一个整数Wi(1<=Wi<=1000),表示每一张牌的重量。
输出格式
如果无解,则输出“0”;如果有多解,则输出“-1”;否则,按照升序输出丢失的牌的编号,相邻两个数之间用一个空格隔开。
样例1
样例输入1[复制]
270 4 100 110 170 200
样例输出1[复制]
2 4
题意:就是个裸的01背包,加个路径输出。
思路:记录下当前值下的前一个值,顺带记录序号,最后遍历一遍,筛出没出现过的数就好了。
/** @Date : 2016-11-29-08.14* @Author : Lweleth (SoungEarlf@gmail.com)* @Link : https://github.com/* @Version :*/#include<bits/stdc++.h>
#define LL long long
#define PII pair<int ,int>
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std;const int INF = 0x3f3f3f3f;
const int N = 1e5+2000;int w, n;
int dp[100010];
int re[100010];
int mp[100010];
int a[110];
int main()
{while(cin >> w >> n){for(int i = 1; i <= n; i++){scanf("%d", a + i);}MMF(dp);MMF(re);int flag = 0;dp[0] = 1;for(int i = 1; i <= n; i++){for(int j = w; j >= 0; j--){if(j >= a[i] && dp[j-a[i]]){dp[j] += dp[j - a[i]];if(dp[j] == 1)re[j] = j - a[i], mp[j] = i;}}}if(!dp[w])printf("0\n");else if(dp[w] > 1)printf("-1\n");else{int t = w;while(t != 0){a[mp[t]] = -1;t = re[t];}for(int i = 1; i <= n; i++){if(a[i] != -1){if(flag)printf(" ");printf("%d", i);flag = 1;}}printf("\n");}}return 0;
}
转载于:https://www.cnblogs.com/Yumesenya/p/6115332.html
vijos 1071 01背包+输出路径相关推荐
- 01背包输出路径、完全背包、多重背包
背包问题 一.01 Knapsack(输出路径- >选的物品) 二.完全背包 1.三重循环,极可能TLE,滚动数组优化后j逆向枚举 2.二重,优化消去变量k(没有特别厘清,但可以直接从完全背包角 ...
- 【01背包记录路径】东东开车了
题面 东东开车出去泡妞(在梦中),车内提供了 n 张CD唱片,已知东东开车的时间是 n 分钟,他该如何去选择唱片去消磨这无聊的时间呢 假设: CD数量不超过20张 没有一张CD唱片超过 N 分钟 每张 ...
- Hrbust 1836 2012世界末日【01背包+反路径输出】
2012世界末日 Time Limit: 1000 MS Memory Limit: 65535 K Total Submit: 38(16 users) Total Accepted: 12(11 ...
- ☆【UVA - 624 】CD(dp + 0-1背包 + 记录路径)
题干: You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music ...
- 【CCCC】L3-001 凑零钱 (30分),,01背包路径打印
problem L3-001 凑零钱 (30分) 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 ...
- POJ1417 True Liars ——种类并查集+01背包+路径** 好题
POJ1417 题意: 有n行输入形如x, y, str,str为yes表示x说y是天使,str为no表示x说y不是天使(x, y为天使,恶魔的编号,1<=x,y<=p+q): ...
- Vijos 1334 ---- NASA的食物计划(01背包强化)
背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力下终止了航天飞机的历史,但是此类事情会不会在以后发生,谁也无法保证,在遇到这类航天问题时,解决方法也许 ...
- 01背包、完全背包、多重背包问题的C++实现及路径记录
这里主要实现路径记录,只求最值问题移步 01背包.完全背包.多重背包问题的C++实现 以下均打印输出路径,即装入背包的物品序号,和最大值. 01背包问题 #include <iostream&g ...
- UVA 624 CD(01背包,要记录路径)
题意: 有n张CD(n<=20),每张能播放的时长不同.给定一个时长限制t,挑出部分的CD使得总播放时间最长.顺便输出路径! 思路: 重点在输出路径,否则这题很普通.那就要用二维数组记录每个CD ...
最新文章
- MYSQL 创建用户1290错误_rhel6 mysql skip-grant-tables 添加用户报错 ERROR 1290
- John细说PHP的验证码
- Linux五部分的含义,Linux 目录下部分重要目录的用途及含义及一些命令的作用
- 页面未加载完时报的错误
- python聊天程序程序代码_python聊天程序实例代码分享
- 类的别名java,类型别名是为 Java 类型设置一个短的名字。 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:typeAliases typeAlias ali...
- 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
- Hadoop常见命令总结
- 浅析busybox如何集成到openwrt
- 华佳慧科技:OSN500设备ERPS相切环组网介绍
- python自动生成字幕脚本_自动生成字幕软件?
- 大数据/数据挖掘/推荐系统/机器学习相关资源
- Gmail配置邮箱客户端
- 平凡之路_2022年
- oracle bpm 集成erp,我们已经执行了ERP系统,为什么还要使用BPM系统?
- 区块链技术在旅游业中的应用探索
- 程序员最新面试谈薪指南
- 领域驱动设计(DDD)之领域专家
- 计算机课小组主题作业,计算机应用课程小组学习法的实践
- Nexys video ftp搭建和传输
热门文章
- 全奖博士招生,美国中佛罗里达大学计算机视觉研究中心
- 年薪 37 万+,挪威科技大学(NTNU)招募博士,利用 ML 和 AI 进行钢桥结构健康监测和损伤检测...
- 第四届 AI City 挑战赛 @ CVPR 2020 开始啦!
- dubbo 路由配置_Dubbo-go v1.5.1发布,Dubbo 的 Go实现
- 【阿里巴巴-CVPR2020】频域学习,Learning in the Frequency Domain
- 重磅!校友会2020中国大学排名出炉!为自己母校感到骄傲!
- C++ Primer 第五版 第6章 6.1——函数及函数定义及调用阅读笔记
- 手把手教我班小姐姐学java之多态
- Stanley轨迹跟踪算法Python/Matlab算法实现
- oracle数据库报错1033,Oracle联机日志出现错误ORA-16038 ORA-19809 ORA-00312 解决