元のページ: http://acm.whu.edu.cn/learn/problem/detail?problem_id=1036
これは単純な動的計画法の問題です。私は解決策を次のように考え出しました:
int main(void)
{
double d[501];
int i;
d[0] = d[1] = 1.;
d[2] = 2.;
for(i = 3; i<=500; i++)
d[i] = d[i-1] + d[i-2] + d[i-3];
int n;
while(scanf("%d", &n) == 1) {
if(n == 0) return 0;
printf("%.0lf\n", d[n]);
}
return 0;
}
しかし、提出後に間違った回答が報告されました。理由は本当にわかりません。