2010年12月18日 星期六

高中 d810: 大朋友下樓梯



想看題目請點我

#include <iostream>
using namespace std;
int answer ;
int recursive(int nowT,int k,int t);
int main() {
     int t,k ; // t 遊戲難度 , k 地下k樓 (0>k>-20)
     while(cin >> t >> k )
     {
         answer = 0 ; // Init
         recursive(t,(-k),t);
         cout <<  answer << endl ;
     }
}

int recursive(int nowT,int k,int t) {
    if((k - nowT ) < 0)
    {
        recursive((nowT-1),(k),t);
    }
    else if( k == 0)
    {
        answer++ ;
        if(nowT > 1)
            recursive((nowT-1),(k),t);
        else
            return EXIT_SUCCESS ;
    }
    else
    {
        for(int i = t ; i > 0 ; i--)
        {
            if((k-i) >=0 )
                recursive(i,(k-i),t);
        }
    }
}
這題解小弟的解法大致上用樹的觀念
例如:    t=3    k=-3
            k
       /     |     \
     1     2     3
    /  \    /
  1   2 1
  /
1