C++
$\color{gold}{— > 蓝桥杯辅导课题解}$
思路:
DP
闫氏DP分析法:
集合:所有总数是i,且分成j个数的和的方案
状态表示
f[i][j] 属性:数量
DP
最小值是0: f[i][j - 1]
状态计算
最小值不是0:f[i - j][j]
状态转移方程:f[i][j] = f[i][j - 1] + f[i - j][j]
#include <bits/stdc++.h>
using namespace std;
int m, n;
int main() {
int t; cin >> t;
while (t --) {
cin >> m >> n;
int f[11][11] = {0};
f[0][0] = 1;
for (int i = 0; i <= m; i ++)
for (int j = 1; j <= n; j ++) {
f[i][j] = f[i][j - 1];
if (i >= j) f[i][j] += f[i - j][j];
}
cout << f[m][n] << endl;
}
return 0;
}