-10

元のページ: 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;
}

しかし、提出後に間違った回答が報告されました。理由は本当にわかりません。

4

2 に答える 2

2

double では精度が不十分です

あなたはそれを解決するために高精度を使用する必要があります

于 2013-01-28T08:37:38.950 に答える
1

小数点かも。printf("%.0lf\n", 1.0);印刷されます1.0が、システムは を待つ場合があり1ます。

于 2013-01-28T09:03:35.350 に答える