思路
本题要用 DP。
状态: 表示前
个数和为
的总方案数。
状态转移方程 ,可以把
数组化成一维数组进行空间优化。
只要把每次计算完加上 即为答案。
注意:别忘了模 。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll mod = 998244353;
const int N = 5e2 + 10;
int a[N], dp[N];
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
int ans = 0;
for (int i = 1; i <= n; i++) {
dp[0]++;
for (int k = m; k >= a[i]; k--) {
dp[k] = (dp[k] + dp[k - a[i]]) % mod;
}
ans = (ans + dp[m]) % mod;
}
cout << ans;
return 0;
}