整数拆分
dp[i][j]表示将i拆成j个数
dp[i][j] = dp[i][i] j>=i
dp[i][j] = dp[i][j-1]+dp[i-j][j] else;
dp[i][j-1]表示第j个盘子不分
dp[i-j][j]表示先保证所有的盘子都有一个
边界dp[i][1] = 1, dp[0][j]=1
int dp[15][15]; int t; signed main() { sc(t) int M,N; while(t--){ sc(M)sc(N) for(int i=0;i<=M;i++){ dp[1][i]=1; } for(int i=2;i<=N;i++){ dp[i][0]=1; for(int j=1;j<=M;j++){ if(i>j)dp[i][j]=dp[j][j]; else dp[i][j]=dp[i-1][j]+ dp[i][j-i]; } } cout<<dp[N][M]<<'\n'; } }