1 条题解

  • 0
    @ 2024-10-27 21:00:56

    这题有很多种思路可以完成,但我选最简短的思路来说,这题可以用动态规划来做,但和普通的动归不一样,他需要统计出第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
    上传者