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

P2842 纸币问题 1

题目描述

某国有 n n n 种纸币,每种纸币面额为 a i a_i ai 并且有无限张,现在要凑出 w w w 的金额,试问最少用多少张纸币可以凑出来?

输入格式

第一行两个整数 n , w n,w n,w,分别表示纸币的种数和要凑出的金额。
第二行一行 n n n 个以空格隔开的整数 a 1 , a 2 , a 3 , … a n a_1, a_2, a_3, \dots a_n a1,a2,a3,an 依次表示这 n n n 种纸币的面额。

输出格式

一行一个整数,表示最少使用的纸币张数。

输入输出样例 #1

输入 #1

6 15
1 5 10 20 50 100

输出 #1

2

输入输出样例 #2

输入 #2

3 15
1 5 11

输出 #2

3

说明/提示

对于 40 % 40\% 40% 的数据,满足 n ≤ 10 n\le 10 n10 w ≤ 100 w\le 100 w100
对于 100 % 100\% 100% 的数据,满足 1 ≤ n ≤ 10 3 1\le n\le 10^3 1n103 1 ≤ a i ≤ w ≤ 10 4 1\le a_i \leq w\le 10^4 1aiw104

考虑 dp 做法,令 dp[i] 表示凑够 i 元所需的纸币张数。
状态转移方程为 d p [ i ] = m i n ( d p [ i − a [ j ] ] + 1 , d p [ i ] ) dp[i]=min(dp[i-a[j]]+1,dp[i]) dp[i]=min(dp[ia[j]]+1,dp[i]),其中 a[j] 表示第 j 个面值。
对于从 1 到 w 的每个金额,枚举最后用的面值,以此更新 dp[i] ,最后 dp[w] 即为答案:

#include <bits/stdc++.h>
using namespace std;int main() {int n, w;cin >> n >> w;vector<int> a(n);for (int i = 0; i < n; ++i) {cin >> a[i];}const int INF = 1e9;vector<int> dp(w + 1, INF);dp[0] = 0;for (int x = 1; x <= w; ++x) {// 枚举最后用的一张纸币for (int i = 0; i < n; ++i) {if (a[i] <= x && dp[x - a[i]] < INF) {dp[x] = min(dp[x], dp[x - a[i]] + 1);}}}cout << dp[w] << "\n";return 0;
}
http://www.xdnf.cn/news/13310.html

相关文章:

  • SpringBoot + 自建GitLab + Jenkins + CentOS Stream 9 来实现自动化部署
  • 商品中心—3.商品可采可补可售的技术文档上
  • Mybatis辅助配置-配置SQL提示
  • 2024 CKS题库+详尽解析| 1. kube-bench 修复不安全项
  • 提取 Word 中图片原始质量
  • 浅谈HDFS--基本操作
  • 进程信号之signal系统调用
  • 【编译工具】(自动化)自动化测试工具:如何让我的开发效率提升300%并保证代码质量?
  • UniApp APP打包方法(Android/iOS双平台)
  • SQL进阶之旅 Day 26:分库分表环境中的SQL策略
  • 三数之和-力扣
  • BUUCTF两道目录包含题目
  • 电动阀门领域的后起之秀:舵机,速度与精度并重
  • AI【应用 01】Trae Agent Gitee自动化辅助神器(使用 MCP tools 创建自定义 Trae Agent 的探索分享)
  • 自定义鼠标效果 - 浏览器扩展使用教程
  • Linux驱动:framebuffer应用层实践
  • React Native UI 框架与动画系统:打造专业移动应用界面
  • vue中的v-model指令和组件通信机制
  • MyBatis实战指南(七)MyBatis缓存机制
  • PosterSQL日常维护
  • Asp.Net Core SignalR导入数据
  • whttpserver:一个命令极速搭建文件上传与下载服务器
  • 前端开发中vue的脚手架你知道是什么意思吗?
  • Kafka 2.7.0 单节点安装与启动教程(适配 JDK 1.8)
  • C++ 中的函数重载
  • 【S905X3通刷】【HK1 BOX】【适配slimBOXtv所有机型】slimBOXtv-9.17.2-ATV系统中文版线刷固件包
  • 循环冗余码校验CRC码 算法步骤+详细实例计算
  • ​​扩散模型调度器(Scheduler)
  • Linux系统编程-DAY12
  • 【第二十一章 SDIO接口(SDIO)】