题目描述:

过年的时候,大人们最喜欢的活动,就是打牌了。xiaomengxian不会打牌,只好坐在一边看着。 这天,正当一群人打牌打得起劲的时候,突然有人喊道:“这副牌少了几张!”众人一数,果然是少了。于是这副牌的主人得意地说:“这是一幅特制的牌,我知道整副牌每一张的重量。只要我们称一下剩下的牌的总重量,就能知道少了哪些牌了。”大家都觉得这个办法不错,于是称出剩下的牌的总重量,开始计算少了哪些牌。由于数据量比较大,过了不久,大家都算得头晕了。 这时,xiaomengxian大声说:“你们看我的吧!”于是他拿出笔记本电脑,编出了一个程序,很快就把缺少的牌找了出来。 如果是你遇到了这样的情况呢?你能办到同样的事情吗?

输入:

第一行一个整数TotalW,表示剩下的牌的总重量。 第二行一个整数N(1<n<=100),表示这副牌有多少张。接下来N行,每行一个整数wi(1<=wi<=1000),表示每一张牌的重量。

输出:

如果无解,则输出“0”;如果有多解,则输出“-1”;否则,按照升序输出丢失的牌的编号,相邻两个数之间用一个空格隔开。

样例输入:

270
4
100
110
170
200

输出样例:

2 4

思路分析:

其实当我开始遇见这道题时,我就这样思考,我们可以将剩下的牌的总重量看做背包的容量,而牌就是物品,但是我们不能用动态规划来直接求出状态。所以我们可以用01背包方案总数来求解——(dp[i]+=dp[j-a[i]],i为物品编号,j为当前的容量)。而我们也可以用一个结构体来存储放入背包的物品编号数,最后加上当前物品就可以了。

代码实现:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,m,a[105],dp[100005];
bool v[105];
struct node{int num[105],len;
}p[100005];
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d",&a[i]);dp[0]=1;for(int i=1;i<=m;i++)for(int j=n;j>=a[i];j--){if(dp[j-a[i]]>0){memcpy(p[j].num,p[j-a[i]].num,sizeof p[j-a[i]].num);p[j].len=p[j-a[i]].len;p[j].len++;p[j].num[p[j].len]=i;dp[j]+=dp[j-a[i]];if(dp[j]>=2&&j==n){printf("-1");return 0;}}}if(dp[n]==0){printf("0");return 0;}for(int i=1;i<=p[n].len;i++)v[p[n].num[i]]=1;for(int i=1;i<=m;i++)if(!v[i])printf("%d ",i);
}

C++01背包问题————新年趣事之打牌相关推荐

  1. 新年趣事之打牌 题解

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

  2. Vijos P1071 新年趣事之打牌

    P1071新年趣事之打牌 Accepted 描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:& ...

  3. 新年趣事之打牌_DP

    新年趣事之打牌 ★  输入文件:bagb.in  输出文件:bagb.out   简单对比 时间限制:1 s   内存限制:128 MB [题目描述] 过年的时候,大人们最喜欢的活动,就是打牌了.xi ...

  4. vijos1071:新年趣事之打牌

    P1071新年趣事之打牌 Accepted 标签: 新年趣事 [显示标签] 描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌 ...

  5. Vijos P1071 新年趣事之打牌(动态规划,背包,统计方案数)

    P1071新年趣事之打牌 Accepted 标签: 动态规划 背包 新年趣事 描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打 ...

  6. 新年趣事之打牌【01背包】【输出方案】

    01背包求方案数 + 输出方案 #include<iostream> #include <algorithm> #include <string.h> using ...

  7. vijos 新年趣事之打牌

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

  8. 1090. [Vijos 1071] 新年趣事之打牌

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #defi ...

  9. 【动态规划】新年趣事之打牌

    问题 来源: vijos P1071 [问题描述] 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道: ...

最新文章

  1. shell查找符号链接及其指向目标的方法
  2. 智能路由器操作系统OpenWrt
  3. [Linux基础环境/软件]Linux下安装resin web服务器(涉及gcc、jdk环境部署)
  4. P2000-拯救世界【生成函数,NTT】
  5. xml编辑 html_【c# .net】Xml读写操作(XmlTextReader 类)
  6. 操作系统下代码设计与走读方法—业务线索法
  7. u-boot移植随笔:自定义u-boot命令点灯
  8. 爱奇艺发布新款电视果,AI 语音控制,4G、WiFi 双模式投屏!
  9. 5月第3周回顾:08软考举行 中国遭大范围SQL注入***
  10. 计算机系统操作中级工试题及答案,计算机系统操作中级工试题附答案.doc
  11. 一款JAVA微信小程序商城源码,带完整后台【运行版】
  12. KiB、MiB与KB、MB的区别
  13. 摄影构图学83年绝版_学手机摄影最好要知道的70条忠告!都是大实话
  14. 只要5个步骤,教你开发一个自己的chrome扩展程序
  15. 我的第一个安卓应用程序_我如何设计我的第一个应用程序
  16. 什么是状态机(Finite-state machine)?
  17. 第十二届noc网络机器人赛项成绩_第十六届中小学NOC活动物流机器人赛项全国决赛获奖结果.pdf...
  18. 2019第二届中国智慧零售终端大会
  19. 移动应用开发——“音乐”小程序项目
  20. 关于在win2003中安装iTunes出错解决

热门文章

  1. QuarkXPress 2018 Mac破解教程
  2. 2020年广东工业大学第十届文远知行杯新生程序设计竞赛(同步赛)(详细题解)
  3. 【英语学习】【化学】几个与氮(Nitrogen)有关的化学词汇 (1)
  4. mysql 姓刘或姓李_“老子姓李”和“高祖是刘”
  5. 【SSM - Spring篇01】spring详细概述,Spring体系结构,bean、property属性,Spring生命周期方法
  6. 基于java闲置物品交易系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  7. nextSibling,nextElementSibling的区别;
  8. 如何查看自己oracle版本,如何查看oracle数据库的版本
  9. 获取验证码按钮点击后,一分钟内不可继续点击
  10. [机缘参悟-9]:道家的主要思想与分层架构