描述

过年的时候,大人们最喜欢的活动,就是打牌了。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背包+输出路径相关推荐

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

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

  2. 【01背包记录路径】东东开车了

    题面 东东开车出去泡妞(在梦中),车内提供了 n 张CD唱片,已知东东开车的时间是 n 分钟,他该如何去选择唱片去消磨这无聊的时间呢 假设: CD数量不超过20张 没有一张CD唱片超过 N 分钟 每张 ...

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

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

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

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

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

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

  6. POJ1417 True Liars ——种类并查集+01背包+路径** 好题

    ​​​​​​POJ1417 题意: 有n行输入形如x, y, str,str为yes表示x说y是天使,str为no表示x说y不是天使(x, y为天使,恶魔的编号,1<=x,y<=p+q): ...

  7. Vijos 1334 ---- NASA的食物计划(01背包强化)

    背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力下终止了航天飞机的历史,但是此类事情会不会在以后发生,谁也无法保证,在遇到这类航天问题时,解决方法也许 ...

  8. 01背包、完全背包、多重背包问题的C++实现及路径记录

    这里主要实现路径记录,只求最值问题移步 01背包.完全背包.多重背包问题的C++实现 以下均打印输出路径,即装入背包的物品序号,和最大值. 01背包问题 #include <iostream&g ...

  9. UVA 624 CD(01背包,要记录路径)

    题意: 有n张CD(n<=20),每张能播放的时长不同.给定一个时长限制t,挑出部分的CD使得总播放时间最长.顺便输出路径! 思路: 重点在输出路径,否则这题很普通.那就要用二维数组记录每个CD ...

最新文章

  1. MYSQL 创建用户1290错误_rhel6 mysql skip-grant-tables 添加用户报错 ERROR 1290
  2. John细说PHP的验证码
  3. Linux五部分的含义,Linux 目录下部分重要目录的用途及含义及一些命令的作用
  4. 页面未加载完时报的错误
  5. python聊天程序程序代码_python聊天程序实例代码分享
  6. 类的别名java,类型别名是为 Java 类型设置一个短的名字。 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:typeAliases typeAlias ali...
  7. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
  8. Hadoop常见命令总结
  9. 浅析busybox如何集成到openwrt
  10. 华佳慧科技:OSN500设备ERPS相切环组网介绍
  11. python自动生成字幕脚本_自动生成字幕软件?
  12. 大数据/数据挖掘/推荐系统/机器学习相关资源
  13. Gmail配置邮箱客户端
  14. 平凡之路_2022年
  15. oracle bpm 集成erp,我们已经执行了ERP系统,为什么还要使用BPM系统?
  16. 区块链技术在旅游业中的应用探索
  17. 程序员最新面试谈薪指南
  18. 领域驱动设计(DDD)之领域专家
  19. 计算机课小组主题作业,计算机应用课程小组学习法的实践
  20. Nexys video ftp搭建和传输

热门文章

  1. 全奖博士招生,美国中佛罗里达大学计算机视觉研究中心
  2. 年薪 37 万+,挪威科技大学(NTNU)招募博士,利用 ML 和 AI 进行钢桥结构健康监测和损伤检测...
  3. 第四届 AI City 挑战赛 @ CVPR 2020 开始啦!
  4. dubbo 路由配置_Dubbo-go v1.5.1发布,Dubbo 的 Go实现
  5. 【阿里巴巴-CVPR2020】频域学习,Learning in the Frequency Domain
  6. 重磅!校友会2020中国大学排名出炉!为自己母校感到骄傲!
  7. C++ Primer 第五版 第6章 6.1——函数及函数定义及调用阅读笔记
  8. 手把手教我班小姐姐学java之多态
  9. Stanley轨迹跟踪算法Python/Matlab算法实现
  10. oracle数据库报错1033,Oracle联机日志出现错误ORA-16038 ORA-19809 ORA-00312 解决