动态规划解DP问题
考虑n的m划分a1+...am=n
①对于每个ai都有ai>0,那么{ai-1}就对应了n-m的m划分
②如果存在ai=0那么就对应了n的m-1划分。综上可得出如下递推关系
dp[i][j]=dp[i][j-i]+dp[i-1][j]
#include<iostream> #include<stdio.h> #include<stdlib.h> using namespace std; int dp[12][12]; int main() { int t,n,m; cin>>t; while(t--) { cin>>n>>m; dp[0][0]=1; for(int i=1;i<=m;i++) { for(int j=0;j<=n;j++) { if(j-i>=0) dp[i][j]=dp[i][j-i]+dp[i-1][j]; else dp[i][j]=dp[i-1][j]; } } cout<<dp[m][n]<<endl; } }