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;
	}
}