https://www.luogu.org/problemnew/show/P1164
设表示前
个菜刚好花
元钱的组合数,对于第
个菜,有要不要两种情况,则有状态转移方程:
数据是,不用滚动数组也行。
代码如下:
#include<iostream>
using namespace std;
int n, m;
int a[101];
int dp[10001];
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
for (int j = m; j >= 1; j--) {
if (a[i] < j) dp[j] = dp[j] + dp[j - a[i]];
else if (a[i] == j) dp[j]++;
}
}
cout << dp[m];
return 0;
}