当前位置: 首页 > news >正文

PAT甲级1068 Find More Coins【01背包】

题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805402305150976

题意

n个硬币,每一个有一个特有的价值,一个硬币只有一个,要求选取一些硬币使得他们的价值刚好是m

输出字典序最小的方案。

思路:

最近好久没有刷题了连PAT都好久没动了这样不行啊。连背包都有点不大会了。赶紧把PAT30分的刷完去刷洛谷了。

硬币是一个weight和value相同的物品,背包的容量就是m

问题转换成尽量让包中的价值大,背包中的最大价值都无法到达m说明没有答案。

价值是不可能超过m的,因为weight和value相同,weight限制了。

用一个bool二维数组来保存某一个方案中有没有这个硬币。

因为要求输出字典序最小的方案,所以刚开始先从大到小来排序,先考察大的,当小的和当前价值一样的时候也进行更新。

这时候的更新就是将更小的一个方案进行更新。

在逆序跑bool数组存方案就行了。

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<map>
 4 #include<set>
 5 #include<iostream>
 6 #include<cstring>
 7 #include<algorithm>
 8 #include<vector>
 9 #include<cmath> 
10 #include<stack>
11 #include<queue>
12 
13 #define inf 0x7fffffff
14 using namespace std;
15 typedef long long LL;
16 typedef pair<string, string> pr;
17 
18 int n, m;
19 const int maxn = 1e4 + 5; 
20 int val[maxn];
21 bool choice[maxn][105];
22 int dp[maxn];
23  
24 bool cmp(int a, int b){
25     return a > b;
26 }
27  
28 int main()
29 {
30     scanf("%d%d", &n, &m);
31     for(int i = 0; i < n; i++){
32         scanf("%d", &val[i]);
33     }
34     sort(val, val + n, cmp);
35     for(int i = 0; i < n; i++){
36         for(int j = m; j >= val[i]; j--){
37             if(dp[j] <= dp[j - val[i]] + val[i]){
38                 choice[i][j] = true;
39                 dp[j] = dp[j - val[i]] + val[i];
40             }
41         }
42     }
43     if(dp[m] != m)printf("No Solution\n");
44     else{
45         vector<int>ans;
46         int now = m, id = n - 1;
47         while(now > 0){
48             if(choice[id][now]){
49                 ans.push_back(val[id]);
50                 now -= val[id];
51             }
52             id--;
53         }
54         printf("%d", ans[0]);
55         for(int i = 1; i < ans.size(); i++){
56             printf(" %d", ans[i]);
57         }
58         printf("\n"); 
59     }
60     return 0;
61 }

 

转载于:https://www.cnblogs.com/wyboooo/p/10641538.html

相关文章:

  • 【BZOJ2125】—最短路(圆方树+树链剖分)
  • Java学习笔记-正则表达式
  • centos7.5搭建zabbix3.4.x以及mysql定制化监控
  • java ReentrantLock
  • C学习笔记-makefile
  • cocos2dx笔记1:概述
  • 易语言QQpost加好友源码
  • Ansible-----常用功能
  • 2019春第六周学习编辑总结
  • 【感悟】一次不太好的寻找bug的体验,RecyclerView
  • mysql 命令启动
  • [题解]区间dp_luogu_P3147 262144
  • Permission denied: .gvfs
  • day2
  • JSP语法入门
  • 【刷算法】求1+2+3+...+n
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • HTML中设置input等文本框为不可操作
  • interface和setter,getter
  • javascript从右向左截取指定位数字符的3种方法
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • nodejs调试方法
  • Python进阶细节
  • React系列之 Redux 架构模式
  • storm drpc实例
  • 安装python包到指定虚拟环境
  • 和 || 运算
  • 深度学习入门:10门免费线上课程推荐
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #QT(TCP网络编程-服务端)
  • $(function(){})与(function($){....})(jQuery)的区别
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (0)Nginx 功能特性
  • (26)4.7 字符函数和字符串函数
  • (arch)linux 转换文件编码格式
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (八十八)VFL语言初步 - 实现布局
  • (待修改)PyG安装步骤
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)图像的%2线性拉伸
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)甲方乙方——赵民谈找工作
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法