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

P2834 纸币问题 3

题目背景

你是一个非常有钱的小朋友。

注意: 本题和《进阶篇》的对应题目,输入格式略有差异。

题目描述

你有 n n n 种面额互不相同的纸币,第 i i i 种纸币的面额为 a i a_i ai 并且有无限张,现在你需要支付 w w w 的金额,请问有多少种纸币组合能恰好支付金额 w w w,答案对 10 9 + 7 10^9+7 109+7 取模。

输入格式

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

输出格式

一行一个整数,表示能恰好凑齐面额 w w w 的纸币组合数量。

输入输出样例 #1

输入 #1

6 15
1 5 10 20 50 100

输出 #1

6

输入输出样例 #2

输入 #2

3 15
1 5 11

输出 #2

5

说明/提示

对于 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 \le w\le 10^4 1aiw104

其实小朋友并不有钱。

同 P2842 纸币问题 1 和 P2840 纸币问题 2。
考虑 dp 做法,令 dp[i] 为凑齐金额 i 的币种组合数,
状态转移方程: d p [ i ] = d p [ i − a [ j ] ] dp[i]=dp[i-a[j]] dp[i]=dp[ia[j]] a [ j ] a[j] a[j]表示第 j 种纸币。
与前两题不同,这里求的是组合数,由于组合不考虑顺序,故我们希望在更新dp——即当前子问题时已有组合中不包括当前讨论的面额。在代码中的表现即为外层遍历纸币面额,内层遍历从 1 到 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 MOD = 1e9+7;vector<int> dp(w + 1, 0);dp[0] = 1;for (int i = 0; i < n; ++i) { // 外层遍历纸币面额for (int x = 1; x <= w; ++x) {if (a[i] <= x && dp[x - a[i]] < MOD) {dp[x] = (dp[x] + dp[x - a[i]]) % MOD;}}}cout << dp[w] << "\n";return 0;
}
http://www.xdnf.cn/news/13614.html

相关文章:

  • 讲一件Java虚拟线程
  • 小白理财 - 入门第一课
  • 扁平风格职场商务通用PPT模版分享
  • AI支持下的-ArcGIS数据处理、空间分析、可视化及多案例综合应用
  • Java多线程实现之同步方法详解
  • Win10重装系统 (重生篇:我在华强修电脑)
  • 用python玩转大语言模型——从 RNN 到文本生成大语言模型的奇幻之旅
  • SpringBoot学习day2-前后端的交互搭建以及跨域问题、拦截过滤器问题的解决
  • 理解系统交互:UML时序图
  • 驭码CodeRider 2.0 产品体验:在VSCode安装并创建一个雷电小游戏
  • Django项目QQ授权登录报错:redirect uri is illegal(100010) 解决方法
  • 深度学习小项目合集之音频语音识别
  • docker-compose搭建eureka-server和zipkin
  • ubuntu 安装 JDK8
  • 安信可(云知声蜂鸟US516P6)SDK开发学习---log日志打印子系统模块
  • 云原生安全实践:CI/CD流水线集成DAST工具
  • 【PostgreSQL系列】PostgreSQL WAL 目录配置
  • 力扣HOT100之贪心算法:45. 跳跃游戏 II
  • 零基础设计模式——行为型模式 - 备忘录模式
  • 前端实现ios26最新液态玻璃效果!
  • Leetcode-11 2 的幂
  • 前端实战:用 HTML+JS 打造可拖动图像对比滑块,提升视觉交互体
  • Reactive-Resume:重构你的简历编写体验
  • window 显示驱动开发-如何查询视频处理功能(六)
  • (LeetCode 动态规划(基础版) )337. 打家劫舍 III (深度优先搜索dfs)
  • 智慧医疗能源事业线深度画像分析(下)
  • window 显示驱动开发-创建视频处理设备
  • android studio底部导航栏
  • Windows 上安装 devsidecar 后,使用 WSL ubuntu ssl 报错
  • redisson锁的可重入、可重试、超时续约原理详解