C++01背包问题————新年趣事之打牌
题目描述:
过年的时候,大人们最喜欢的活动,就是打牌了。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背包问题————新年趣事之打牌相关推荐
- 新年趣事之打牌 题解
新年趣事之打牌 题目描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:"这副牌少了几张 ...
- Vijos P1071 新年趣事之打牌
P1071新年趣事之打牌 Accepted 描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:& ...
- 新年趣事之打牌_DP
新年趣事之打牌 ★ 输入文件:bagb.in 输出文件:bagb.out 简单对比 时间限制:1 s 内存限制:128 MB [题目描述] 过年的时候,大人们最喜欢的活动,就是打牌了.xi ...
- vijos1071:新年趣事之打牌
P1071新年趣事之打牌 Accepted 标签: 新年趣事 [显示标签] 描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌 ...
- Vijos P1071 新年趣事之打牌(动态规划,背包,统计方案数)
P1071新年趣事之打牌 Accepted 标签: 动态规划 背包 新年趣事 描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打 ...
- 新年趣事之打牌【01背包】【输出方案】
01背包求方案数 + 输出方案 #include<iostream> #include <algorithm> #include <string.h> using ...
- vijos 新年趣事之打牌
描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:"这副牌少了几张!"众人一 ...
- 1090. [Vijos 1071] 新年趣事之打牌
#include<iostream> #include<cstdio> #include<string> #include<cstring> #defi ...
- 【动态规划】新年趣事之打牌
问题 来源: vijos P1071 [问题描述] 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道: ...
最新文章
- shell查找符号链接及其指向目标的方法
- 智能路由器操作系统OpenWrt
- [Linux基础环境/软件]Linux下安装resin web服务器(涉及gcc、jdk环境部署)
- P2000-拯救世界【生成函数,NTT】
- xml编辑 html_【c# .net】Xml读写操作(XmlTextReader 类)
- 操作系统下代码设计与走读方法—业务线索法
- u-boot移植随笔:自定义u-boot命令点灯
- 爱奇艺发布新款电视果,AI 语音控制,4G、WiFi 双模式投屏!
- 5月第3周回顾:08软考举行 中国遭大范围SQL注入***
- 计算机系统操作中级工试题及答案,计算机系统操作中级工试题附答案.doc
- 一款JAVA微信小程序商城源码,带完整后台【运行版】
- KiB、MiB与KB、MB的区别
- 摄影构图学83年绝版_学手机摄影最好要知道的70条忠告!都是大实话
- 只要5个步骤,教你开发一个自己的chrome扩展程序
- 我的第一个安卓应用程序_我如何设计我的第一个应用程序
- 什么是状态机(Finite-state machine)?
- 第十二届noc网络机器人赛项成绩_第十六届中小学NOC活动物流机器人赛项全国决赛获奖结果.pdf...
- 2019第二届中国智慧零售终端大会
- 移动应用开发——“音乐”小程序项目
- 关于在win2003中安装iTunes出错解决
热门文章
- QuarkXPress 2018 Mac破解教程
- 2020年广东工业大学第十届文远知行杯新生程序设计竞赛(同步赛)(详细题解)
- 【英语学习】【化学】几个与氮(Nitrogen)有关的化学词汇 (1)
- mysql 姓刘或姓李_“老子姓李”和“高祖是刘”
- 【SSM - Spring篇01】spring详细概述,Spring体系结构,bean、property属性,Spring生命周期方法
- 基于java闲置物品交易系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
- nextSibling,nextElementSibling的区别;
- 如何查看自己oracle版本,如何查看oracle数据库的版本
- 获取验证码按钮点击后,一分钟内不可继续点击
- [机缘参悟-9]:道家的主要思想与分层架构