整數劃分 dp
阿新 • • 發佈:2019-02-03
蒜頭君特別喜歡數學。今天,蒜頭君突發奇想:如果想要把一個正整數 nn 分解成不多於 kk 個正整數相加的形式,那麼一共有多少種分解的方式呢?
蒜頭君覺得這個問題實在是太難了,於是他想讓你幫幫忙。
輸入格式
共一行,包含兩個整數 n(1 \leq n \leq 300)n(1≤n≤300) 和 k(1 \leq k \leq 300)k(1≤k≤300),含義如題意所示。
輸出格式
一個數字,代表所求的方案數。
樣例輸入
5 3
樣例輸出
5
#include<stdio.h> long long n,k,dp[310][310]; int main() { scanf("%lld %lld",&n,&k); for(int i=1; i<=n; i++) { for(int j=1; j<=k; j++) { if(i==1||j==1) dp[i][j]=1; else if(i<j) dp[i][j]=dp[i][i]; else if(i>j) dp[i][j]=dp[i-j][j]+dp[i][j-1]; else dp[i][j]=1+dp[i][j-1]; } } long long s=dp[n][k]; printf("%lld\n",s); return 0; }