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

Coin Combinations I(Dynamic Programming)

题目描述

Consider a money system consisting of n coins. Each coin has a positive integer value. Your task is to calculate the number of distinct ways you can produce a money sum x using the available coins.
For example, if the coins are {2,3,5} and the desired sum is 9, there are 8 ways:

2+2+5
2+5+2
5+2+2
3+3+3
2+2+2+3
2+2+3+2
2+3+2+2
3+2+2+2

输入

The first input line has two integers n and x: the number of coins and the desired sum of money.
The second line has n distinct integers c1,c2,...,cn: the value of each coin.

Constraints

1 ≤ n ≤ 100
1 ≤ x ≤ 10^6
1 ≤ ci ≤ 10^6

输出

Print one integer: the number of ways modulo 10^9+7.

样例输入
3 9
2 3 5
样例输出
8

思路分析

动态规划。

从1到x,找出所有金额的硬币组合方法。

初始化dp[0]=1,便于后期i=j的情况下直接添加一种方法。

本题样例解析:

i=1时,没有小于等于1的硬币金额,dp[1]=0.

i=2时,j=2,dp[2]+=dp[2-2],dp[2]=1.

i=3时,j=2,dp[3]+=dp[3-2],dp[3]=0; j=3,dp[3]+=dp[3-3],dp[3]=1.

i=4时,j=2,dp[4]+=dp[4-2],dp[4]=1; j=3,dp[4]+=dp[4-3],dp[4]=1.

i=5时,j=2,dp[5]+=dp[5-2],dp[5]=1; j=3,dp[5]+=dp[5-3],dp[5]=2;

         j=5,dp[5]+=dp[5-5],dp[5]=3.

i=6时,j=2,dp[6]+=dp[6-2],dp[6]=1; j=3,dp[6]+=dp[6-3],dp[6]=2;

         j=5,dp[6]+=dp[6-5],dp[6]=2.

i=7时,j=2,dp[7]+=dp[7-2],dp[7]=2; j=3,dp[7]+=dp[7-3],dp[7]=4;

         j=5,dp[7]+=dp[7-5],dp[7]=5.

i=8时,j=2,dp[8]+=dp[8-2],dp[8]=2; j=3,dp[8]+=dp[8-3],dp[8]=5;

         j=5,dp[8]+=dp[8-5],dp[8]=6.

i=9时,j=2,dp[9]+=dp[9-2],dp[9]=5; j=3,dp[9]+=dp[9-3],dp[9]=7;

         j=5,dp[9]+=dp[9-5],dp[9]=8.

代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=1e6+1;
const ll mod=1e9+7;
ll n,x;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n>>x;vector<ll>a(n,0);for(ll i=0;i<n;i++){cin>>a[i];}sort(a.begin(),a.end());vector<ll>dp(N,0);dp[0]=1;for(ll i=1;i<=x;i++){for(ll&j:a){if(j>i)break;dp[i]+=dp[i-j];dp[i]%=mod;}}cout<<dp[x];return 0;
}

http://www.dtcms.com/a/312510.html

相关文章:

  • ThinkPHP 与 Vue.js 结合的全栈开发模式
  • 多线程(三)-线程安全原因与解决
  • Day26-二叉树的最小深度
  • 【软考中级网络工程师】知识点之 RIP 协议
  • C++ 之 【模拟实现 优先级队列】
  • SQL 地理空间原理与实现
  • slice() 和 splice()
  • 信创及一次ORACLE到OB的信创迁移
  • 自由学习记录(76)
  • Python 的标准库 bisect 模块
  • 源码交易平台排行榜
  • 机器学习 决策树基本介绍
  • Mysql的MVCC是什么
  • HCIE-Datacom题库_07_设备【道题】
  • 《深入解析 Python 的 `*args` 和 `**kwargs`:从基础使用到高级应用》
  • 【数据结构】哈希表实现
  • 网关和BFF是如何演化的
  • uniapp 跨端开发
  • 基于Springboot+UniApp+Ai实现模拟面试小工具八:管理端基础功能实现
  • (论文速读)探索多模式大型语言模型的视觉缺陷
  • DeepSeek 论文夺冠,智谱开源 GLM-4.5,OpenAI 学习模式上线!| AI Weekly 7.28-8.3
  • 基于机器学习的Web应用漏洞分析与预测系统,使用django框架,三种机器学习模型
  • 深入探讨AI在测试领域的三大核心应用:自动化测试框架、智能缺陷检测和A/B测试优化,并通过代码示例、流程图和图表详细解析其实现原理和应用场景。
  • 关于Web前端安全防御之内容安全策略(CSP)
  • 知识蒸馏 - 基于KL散度的知识蒸馏 HelloWorld 示例 采用PyTorch 内置函数F.kl_div的实现方式
  • 【Linux系统】进程间通信:匿名管道
  • AI 时代的 IT 从业者:共生而非替代
  • 人声伴奏分离API:音乐智能处理的强大工具
  • Spring AI 项目实战(二十二):Spring Boot + AI +DeepSeek实现智能合同数据问答助手​(附完整源码)
  • 小白学OpenCV系列2-理解图像