PAT甲级1068 Find More Coins (30 分):[C++题解]DP、背包问题、dp输出方案
文章目录
- 题目分析
- 题目链接
题目分析
来源: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输出方案相关推荐
- PAT甲级1076 Forwards on Weibo (30 分) :[C++题解]图论、bfs
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: BFS如何搜前k层?统计前k层的点数. ac代码 #include<bits/stdc++.h> using names ...
- PAT甲级1045 Favorite Color Stripe (30 分):[C++题解]最佳彩色带、DP、公共子序列变形
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:这是一个公共子序列的问题.但是有点变式,序列a和序列b不是完全等价的,序列a的每个元素可以对应多个相同元素,而且有些元素可以不使用.比 ...
- PAT甲级1119 Pre- and Post-order Traversals (30分):[C++题解]暴搜dfs、前序遍历和后序遍历求中序遍历
文章目录 题目分析 题目链接 题目分析 分析 给了前序遍历和后序遍历,能够确定根结点,但是左子树和右子树的长度是不确定的.这里采用的解决方案是枚举左子树的结点个数,其实右子树的结点个数也确定了.对于每 ...
- 1068 Find More Coins (30分)
文章目录 1 题目 2 解析 2.1 题意 2.2 思路 3 参考代码 1 题目 1068 Find More Coins (30分) Eva loves to collect coins from ...
- PAT甲级1143 Lowest Common Ancestor (30 分):[C++题解]LCA、最低公共祖先
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:二叉搜索树的中序遍历是隐含给定的,它的中序遍历就是从小到大排列. 所以这道题先是根据给定的前序遍历和中序遍历,建树. 建树的时候需要用 ...
- 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 ...
- 【PAT甲级】1048 Find Coins (25 分) C++ 全部AC
题目 给你一个sum,以及拥有的钱 让你找出一个组合,正好用两张钱付清sum,注意如果有多个结果,输出其中最小的 这道题注意稍微优化一下算法,要不然卡在测试点3,4 我是用二重循环过了的,只要注意输入 ...
- 1068 Find More Coins (30 分)【难度: 难 / 知识点:01背包问题 + 找路径】
https://pintia.cn/problem-sets/994805342720868352/problems/994805402305150976 f[i][j] 表示的是从前i个物品种选,体 ...
- 【PAT - 甲级1155】Heap Paths (30分)(栈,dfs,二叉树)
题干: In computer science, a heap is a specialized tree-based data structure that satisfies the heap p ...
最新文章
- 关于JavaScript中Function Declaration与Function Expression的进一步说明
- hdfs mv命令_如何HDFS mv命令工作
- 使用gethostname()函数和gethostbyname()函数获取主机相关信息
- Linux下V4L2编程小结
- 一建机电实务教材电子版_这是属于一建人的“五年真题+3年模拟”,实务能考128分全靠它了...
- 1.5.7、CDH 搭建Hadoop在安装之前(定制安装解决方案---配置单用户模式)
- 从0到1搭建RPC框架
- 创业 7 年最痛教训
- 为什么要Code Review
- 《计算机网络(第7版)》-谢希仁
- 支持向量机原理(理解SVM的三层境界)
- Hibernate学习笔记(三) — Hibernate 的一级缓存意义
- Java实现腾讯企业邮箱收发邮件
- MySQL的函数以及相关案例与练习
- 不会产生ICMP差错报文的情况
- php 过滤英文标点符号 过滤中文标点符号
- 利用C++求解一元二次方程
- 男孩子学计算机好不好,适合男孩学的专业 男生最吃香的专业
- 在WORD中批量修改图片大小
- java1.17知识点回顾
热门文章
- Sqoop找不到主类 Error: Could not find or load main class org.apache.sqoop.Sqoop
- Bootstrap基础二十七 多媒体对象(Media Object)
- 自己写一个图片按钮(XAML)
- android.database.cursorindexoutofboundsexception错误解决 及获取某行某列信息
- 【转】InstantClient安装使用
- android ImageButton设置背景图片无法显示
- 标准模板库(STL)学习指南之List链表
- Firebug快速入门(二)
- ANN神经网络分类2*2矩阵:吸引子和反鞍点cfa-cp
- 测量一条反斜线的频率和质量n+m=9