【题目链接】

ybt 1273:【例9.17】货币系统
注:题目中0<n≤1000<n\le 1000<n≤100,0<m≤100000<m\le 100000<m≤10000
结果要用long long表示

【题目考点】

1. 动态规划:完全背包问题

【解题思路】

1. 状态定义

  • 集合:选择货币的方案
  • 限制:选择哪些种类面值的货币,凑多少钱
  • 属性:货币面值加和
  • 条件:等于m
  • 统计量:方案数

状态定义dp[i][j]:在前i种货币中选择货币凑j元钱的方案数。
初始状态:前i种货币中选择货币凑0元的方案数为1,不选任何货币也算一种方案。dp[i][0] = 1

2. 状态转移方程

记第i种货币的面值为a[i]
集合:在前i种货币中选择货币凑j元钱的方案。
分割集合:是否选择第i种面值的货币

  • 子集1:如果不选择第i种面值的货币,那么在前i种货币中选择货币凑j元的方案数,为在前i-1种货币中选择货币凑j元的方案数,为dp[i-1][j]
  • 子集2:在要凑的钱数j大于等于第i种货币的面值a[i]的情况下,如果选择第i种货币,下一次还可以选择第i种货币。那么还需要在前i种货币中选择货币凑j-a[i]元。在前i种货币中选择货币凑j元的方案数,为在前j种货币中选择货币凑j-a[i]元的方案数,为dp[i][j-a[i]]
  • 以上两种情况得到的方案数加和,即为在前i种货币中选择货币凑j元的方案数。dp[i][j] = dp[i-1][j] + dp[i][j-a[i]]
    原解法时间复杂度:O(m∗n)O(m*n)O(m∗n),空间复杂度:O(m∗n)O(m*n)O(m∗n)。
    可以对该问题使用滚动数组优化,时间复杂度:O(m∗n)O(m*n)O(m∗n),空间复杂度O(n)O(n)O(n)。

【题解代码】

解法1:基本解法,二维状态

#include<bits/stdc++.h>
using namespace std;
#define N 105
#define M 10005
long long m, n, dp[N][M], a[N];//dp[i][j]:前i种货币凑j元的方案数
int main()
{cin >> n >> m;for(int i = 1; i <= n; ++i)cin >> a[i];for(int i = 0; i <= n; ++i)//前i种货币中选择货币凑0元的方案数为1dp[i][0] = 1;for(int i = 1; i <= n; ++i)for(int j = 0; j <= m; ++j){if(j >= a[i])dp[i][j] = dp[i-1][j] + dp[i][j-a[i]];elsedp[i][j] = dp[i-1][j];}cout << dp[n][m];return 0;
}

解法2:滚动数组优化,一维状态

#include<bits/stdc++.h>
using namespace std;
#define N 105
#define M 10005
long long m, n, dp[M], a[N];//dp[i][j]:前i种货币凑j元的方案数
int main()
{cin >> n >> m;for(int i = 1; i <= n; ++i)cin >> a[i];dp[0] = 1;for(int i = 1; i <= n; ++i)for(int j = a[i]; j <= m; ++j)dp[j] = dp[j] + dp[j-a[i]];cout << dp[m];return 0;
}

信息学奥赛一本通 1273:【例9.17】货币系统相关推荐

  1. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1059:求平均年龄

    时间限制: 1000 ms 内存限制: 65536 KB 提交数: 22146 通过数: 11998 [题目描述] 班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点 ...

  2. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1052:计算邮资

    时间限制: 1000 ms 内存限制: 65536 KB 提交数: 14287 通过数: 7151 [题目描述] 根据邮件的重量和用户是否选择加急计算邮费. 计算规则:重量在1000克以内(包括100 ...

  3. 信息学奥赛一本通(C++)在线评测系统——基础(二)基础算法 —— 1313:【例3.5】位数问题

    时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4005 通过数: 2088 [题目描述] 在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对1 ...

  4. 信息学奥赛一本通(C++)在线评测系统——基础(二)基础算法 —— 1312:【例3.4】昆虫繁殖

    时间限制: 1000 ms 内存限制: 65536 KB 提交数: 5602 通过数: 2671 [题目描述] 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强.每对成虫过x个月产y对卵 ...

  5. 信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构 —— 1339:【例3-4】求后序遍历

    时间限制: 1000 ms 内存限制: 65536 KB 提交数: 1380 通过数: 940 [题目描述] 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列. [输入] 共两行,第一行一个字符 ...

  6. 信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构—— 1338:【例3-3】医院设置

    时间限制: 1000 ms 内存限制: 65536 KB 提交数: 1018 通过数: 719 [题目描述] 设有一棵二叉树(如图3-8,其中圈中的数字表示结点中居民的人口,圈边上数字表示结点编号.现 ...

  7. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1066:满足条件的数累加

    时间限制: 1000 ms 内存限制: 65536 KB 提交数: 10060 通过数: 8436 [题目描述] 将正整数m和n之间(包括m和n)能被17整除的数累加,其中0<m<n< ...

  8. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1112:最大值和最小值的差

    时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9363 通过数: 5690 [题目描述] 输出一个整数序列中最大的数和最小的数的差. [输入] 第一行为M,表示整数个数,整数个数 ...

  9. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1109:开关灯

    时间限制: 1000 ms 内存限制: 65536 KB 提交数: 11709 通过数: 5381 [题目描述] 假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号, 初始时全部处于开 ...

最新文章

  1. 2022年清华大学大数据研究中心 | 招募夏季学期《大数据实践课》合作企业
  2. 使用python对比两个目录下的文件名差异
  3. nebula加入时间约束条件,查询结果没有输出
  4. RTMPdump(libRTMP) 源代码分析 8: 发送消息(Message)
  5. 聊聊身边的嵌入式,乘风破浪的比特币
  6. 如果不这样用,Nacos也有安全问题!
  7. php控制器实现自动映射,PHP实现路由映射到指定控制器
  8. vue2学习计划1-3 浏览器跨域问题(mock-api)
  9. jmeter mysql driver_jmeter测试mysql数据库之JDBC请求
  10. oracle客户端导入dmp文件格式,在linux服务器上导入oracle的DMP文件
  11. 数据库系统原理及mysql应用教程第二版_数据库系统原理及MySQL应用教程(第2版)...
  12. 医院建设项目可行性研究报告、可行性分析报告
  13. 组合数学 8种盒子放球问题
  14. IIS-网站报500.19错误代码0x8007000d问题解决
  15. miui修改Android,无法修改小米MIUI设备中的系统设置
  16. 并发-MESI缓存一直协议详解
  17. iTunes 4.9播客
  18. java available用法_Java ObjectInputStream available()用法及代码示例
  19. 甚小孔径终端(VSAT)卫星网络拓扑结构及接入方式
  20. 2022“杭电杯”中国大学生算法设计超级联赛 (1) 杭电多校第一场 2 3 4 5 8 12

热门文章

  1. 关于bit-banding的解释和相关作用(转载)
  2. “体验版”PyTorch 2.0备受瞩目,它到底好在哪里?
  3. offlc计算机等级报一级还是二级,请问计算机二级MS Office 和MS Office高级应用是一个东西吗?...
  4. docker拉取镜像时,报错:no matching manifest
  5. tcpdump使用详解及数据包分析
  6. java语言中如何表示素数,使用Java语言求素数的几个方法
  7. 编写一个掷色子猜大小的游戏
  8. 自学web前端练手——js的考试倒计时
  9. android 一分钟倒计时动画,Android View篇之启动页倒计时动画的实现
  10. DevOps名言警句 - 2021