簡單的整數劃分問題 OpenJ_Bailian
阿新 • • 發佈:2018-12-12
非常非常經典的問題. 一直以來總是沉浸於用演算法的思維去解決問題, 碰到一個題, 就先想想能不能套版子能不能用Dfs..Dp.
這道題看起來不難, 自己嘗試寫了一下, 結果是WA了. 可以說是一道比較純粹的數學問題, 而且不算太難, 稍有基礎的高中生應該都能列出來函式式的數學問題.
切記: 演算法, 首先就是數學.
這道題中大量用到了數學中極其常用的分類討論思想.
劃出箭頭的地方大家仔細理解一下.
題中要求我們求的即是f(n, n)
//簡單的整數劃分問題 #include<cstdio> using namespace std; int num; int f(int n, int m) { if(n==1 || m==1) return (1); else if(n==m) return (f(n, n-1)+1); else if(n < m) return (f(n, n)); else if(n > m) return (f(n-m, m)+f(n, m-1)); } int main() { while(scanf("%d",&num) != EOF){ printf("%d\n",f(num, num)); } return 0; }