C++动态规划版
#include<iostream> using namespace std; int dp[201][7]; int main() { int n, k; cin >> n >> k; for(int i = 1; i <= n; i++) { for(int j = 1; j <= k; j++) { if( j > i ) { // 无法将i分成大于i份 dp[i][j] = 0; } else if( 1 == j || i == j) { // i个数分为1份和个数分为i份情况只有一种 dp[i][j] = 1; } else { // 这里分为两种情况考虑:含1还是不含1 dp[i][j] = dp[i - 1][j - 1] + dp[i - j][j]; } } } cout << dp[n][k]; }