[提交][状态][讨论版]
题目描述
给你一个n种面值的货币系统,求组成面值为m的货币有多少种方案。样例:设n=3,m=10,要求输入和输出的格式如下:
输入
第一行两个整数n,m(m<=5000)
以下n行,每行一个整数,第i+1行为第i种货币的面值
输出
一个整数,为方案数
样例输入
3 10
1
2
5
样例输出
10
提示
来源
动态规划-背包问题
#include<bits/stdc++.h>
using namespace std;
int a[5005];
long long dp[5005];
int main()
{
int n,m;
std::ios::sync_with_stdio(false);
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]<<endl;
return 0;
}