1 条题解
-
0
这题有很多种思路可以完成,但我选最简短的思路来说,这题可以用动态规划来做,但和普通的动归不一样,他需要统计出第i个可能出现的数量。代码如下:
#include<bits/stdc++.h> using namespace std; const int mod = 1e6 + 7; int n, m, a[110], f[110][110]; int main() { cin >> n >> m; for (int i = 1; i <= n; i++)cin >> a[i]; f[0][0] = 1; for (int i = 1; i <= n; i++) { for (int j = 0; j <= m; j++) { for (int k = 0; k <= min(j, a[i]); k++) { f[i][j] += f[i - 1][j - k]; f[i][j] %= mod; } } } cout << f[n][m]; return 0; }
这里就是分别将第i种题选0-min(j,a[i])的数量都统计了。
- 1
信息
- ID
- 123
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 35
- 已通过
- 22
- 上传者