https://www.luogu.org/problem/show?pid=1025
n的k划分 且不出现划分成0的情况 可以
分为两种情况
所有划分的数 都大于1的情况
至少划分的数里面有1的情况
并且 这两个情况是互补的
第一个情况可以 当作把所有的数 都减去1 然后就相当于 dp[n-k][k] 就是n-k的k划分
然后另外一个就是 dp[n-1][k-1] 就是n-1 的 k-1划分
#include<bits/stdc++.h> using namespace std; int dp[300][10]; int main () { int n,k; cin >> n >> k; dp[0][0] =1; for(int i=1;i<=n;i++) { for(int j=1;j <= i && j<=k ;j++) { dp[i][j] = dp[i-j][j] + dp[i-1][j-1]; cout <<" dp[i-j][j]= "<<dp[i-j][j]<<" dp[i-1][j-1]"<<dp[i-1][j-1]<<endl; cout << i<<' '<<j<<' '<<dp[i][j]<<endl; } } cout << dp[1][1]<<endl; cout<< dp[n][k]<<endl; }