AOJ - Problem 0168 : Kannondou
DPで解けます。i段目の上がり方がA[i]通りあるとすると
i段目に来るためには1つ下の段か、2つ下の段か、3つ下の段から来るはずなので
A[i]はA[i-1]+A[i-2]+A[i-3]で求まります。
解は(A[n]/365/10)+1を出力します。
#include <iostream> using namespace std; int main(){ int n; int a[31] = {1,1,2}; for(int i=3 ; i <= 30 ; i++ ){ a[i] = a[i-1] + a[i-2] + a[i-3]; } while( cin >> n , n ){ cout << (a[n]/10/365 + 1) << endl; } }