1. 程式人生 > >簡單的整數劃分問題 OpenJ_Bailian

簡單的整數劃分問題 OpenJ_Bailian

非常非常經典的問題. 一直以來總是沉浸於用演算法的思維去解決問題, 碰到一個題, 就先想想能不能套版子能不能用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;
}