数字和
Description
给你一个数字sum,再给k个数字num1、num2、...、numk,现在需要将k个数字进行组合,使得他们的和为sum。请问有多少种组合?如果任何组合的和都不等于sum,返回0。
Input
第一行输入数字sum,第二行输入数字个数k,接下来k行分别输入k个数字。
Output
输出组合的个数。
完全背包
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
int sum, k, res;
int a[N], dp[N];
void run()
{
cin >> sum >> k;
for (int i = 1; i <= k; i ++)
{
cin >> a[i];
}
memset(dp, 0, sizeof dp);
dp[0] = 1;
for (int i = 1; i <= k; i ++)
{
for (int j = a[i]; j <= sum; j ++)
{
dp[j] += dp[j - a[i]];
}
}
cout << dp[sum] << endl;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
run();
return 0;
}