文章目录

  • 题目分析
  • 题目链接

题目分析

来源:acwing
分析:m是背包容量,a1,a2,....,ana_1,a_2,....,a_na1​,a2​,....,an​是n个物品,第i个物品的体积是aia_iai​,恰好装满背包,且字典序最小的方案。

状态表示:f[i][j]f[i][j]f[i][j]表示只考虑前i个物品,总体积为j的选法是否存在。存在的话置为true,不存在的话置为false。

状态计算:
两种情况:不包含第i个物品:f[i−1][j]f[i-1][j]f[i−1][j] ,意思是从1~i-1中选,面额是j,能不能凑出来,凑出来是true,凑不出来是false。

包含第i个物品:f[i−1][j−ai]f[i-1][j-a_i]f[i−1][j−ai​],意思是从1~i-1中选,面额是j−aij-a_ij−ai​,能不能凑出来。

由于要求输出最小的方案,这里需要对a数组进行从大到小排序。这样dp输出方案的时候是从小到大的。dp输出的原理是从最终的状态f[n][m]倒推的。

ac代码

#include<bits/stdc++.h>
using namespace std;const int N =10010 , M = 110; //数量, 面额int n, m;
int a[N];
bool f[N][M];int main(){cin >> n >> m;for(int i =1; i<= n; i++ ) cin >> a[i];//从大到小排序,这样dp输出方案的时候是从小到大。sort( a+1, a+n+1, greater<int>());f[0][0] = true;for(int i =1; i<= n; i++)for(int j =0; j<= m; j++){f[i][j] = f[i-1][j];if(j >= a[i]) f[i][j]  |= f[i-1][j-a[i]]; //两种情况中的第二种}if(!f[n][m]) cout<<"No Solution"<<endl;else{bool is_first  = true;while(n){if(m>=a[n] && f[n-1][m-a[n]]){if(is_first) is_first = false;else cout<<" ";cout << a[n];m -= a[n];}n--; }}
}

题目链接

PAT甲级1068 Find More Coins (30 分)

PAT甲级1068 Find More Coins (30 分):[C++题解]DP、背包问题、dp输出方案相关推荐

  1. PAT甲级1076 Forwards on Weibo (30 分) :[C++题解]图论、bfs

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: BFS如何搜前k层?统计前k层的点数. ac代码 #include<bits/stdc++.h> using names ...

  2. PAT甲级1045 Favorite Color Stripe (30 分):[C++题解]最佳彩色带、DP、公共子序列变形

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:这是一个公共子序列的问题.但是有点变式,序列a和序列b不是完全等价的,序列a的每个元素可以对应多个相同元素,而且有些元素可以不使用.比 ...

  3. PAT甲级1119 Pre- and Post-order Traversals (30分):[C++题解]暴搜dfs、前序遍历和后序遍历求中序遍历

    文章目录 题目分析 题目链接 题目分析 分析 给了前序遍历和后序遍历,能够确定根结点,但是左子树和右子树的长度是不确定的.这里采用的解决方案是枚举左子树的结点个数,其实右子树的结点个数也确定了.对于每 ...

  4. 1068 Find More Coins (30分)

    文章目录 1 题目 2 解析 2.1 题意 2.2 思路 3 参考代码 1 题目 1068 Find More Coins (30分) Eva loves to collect coins from ...

  5. PAT甲级1143 Lowest Common Ancestor (30 分):[C++题解]LCA、最低公共祖先

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:二叉搜索树的中序遍历是隐含给定的,它的中序遍历就是从小到大排列. 所以这道题先是根据给定的前序遍历和中序遍历,建树. 建树的时候需要用 ...

  6. PAT甲级-1045 Favorite Color Stripe (30分)

    点击链接PAT甲级-AC全解汇总 题目: Eva is trying to make her own color stripe out of a given one. She would like t ...

  7. 【PAT甲级】1048 Find Coins (25 分) C++ 全部AC

    题目 给你一个sum,以及拥有的钱 让你找出一个组合,正好用两张钱付清sum,注意如果有多个结果,输出其中最小的 这道题注意稍微优化一下算法,要不然卡在测试点3,4 我是用二重循环过了的,只要注意输入 ...

  8. 1068 Find More Coins (30 分)【难度: 难 / 知识点:01背包问题 + 找路径】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805402305150976 f[i][j] 表示的是从前i个物品种选,体 ...

  9. 【PAT - 甲级1155】Heap Paths (30分)(栈,dfs,二叉树)

    题干: In computer science, a heap is a specialized tree-based data structure that satisfies the heap p ...

最新文章

  1. 关于JavaScript中Function Declaration与Function Expression的进一步说明
  2. hdfs mv命令_如何HDFS mv命令工作
  3. 使用gethostname()函数和gethostbyname()函数获取主机相关信息
  4. Linux下V4L2编程小结
  5. 一建机电实务教材电子版_这是属于一建人的“五年真题+3年模拟”,实务能考128分全靠它了...
  6. 1.5.7、CDH 搭建Hadoop在安装之前(定制安装解决方案---配置单用户模式)
  7. 从0到1搭建RPC框架
  8. 创业 7 年最痛教训
  9. 为什么要Code Review
  10. 《计算机网络(第7版)》-谢希仁
  11. 支持向量机原理(理解SVM的三层境界)
  12. Hibernate学习笔记(三) — Hibernate 的一级缓存意义
  13. Java实现腾讯企业邮箱收发邮件
  14. MySQL的函数以及相关案例与练习
  15. 不会产生ICMP差错报文的情况
  16. php 过滤英文标点符号 过滤中文标点符号
  17. 利用C++求解一元二次方程
  18. 男孩子学计算机好不好,适合男孩学的专业 男生最吃香的专业
  19. 在WORD中批量修改图片大小
  20. java1.17知识点回顾

热门文章

  1. Sqoop找不到主类 Error: Could not find or load main class org.apache.sqoop.Sqoop
  2. Bootstrap基础二十七 多媒体对象(Media Object)
  3. 自己写一个图片按钮(XAML)
  4. android.database.cursorindexoutofboundsexception错误解决 及获取某行某列信息
  5. 【转】InstantClient安装使用
  6. android ImageButton设置背景图片无法显示
  7. 标准模板库(STL)学习指南之List链表
  8. Firebug快速入门(二)
  9. ANN神经网络分类2*2矩阵:吸引子和反鞍点cfa-cp
  10. 测量一条反斜线的频率和质量n+m=9