【问题标题】:Online Judgement System - Why am I getting Wrong Answer for this thread? [closed]在线判断系统 - 为什么我在这个帖子中得到了错误的答案? [关闭]
【发布时间】:2013-01-11 13:36:41
【问题描述】:

原始页面: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;
}

但提交后报错答案。我真的不知道为什么。

【问题讨论】:

  • OJ?哇? DP? WTPF?

标签: c algorithm dynamic-programming


【解决方案1】:

双精度不够

你应该用高精度来解决它

【讨论】:

  • 双倍绰绰有余
  • @UmNyobe 你能告诉我为什么我得到了错误的答案吗?
  • 高精度是如何实现的?
  • @UmNyobe 对于 500 张卡片,有 1306186569702186634983475450062372018715120191391192207156664343051610913971927959744519676992404852130396504615663042713312314219527 方式。 double 还不够。
  • 我的错误。 3^(n/3)d[0] &lt; d[n] &lt; 3^(n) d[2]。确实,3^(166) 很大。
【解决方案2】:

可能是小数点。 printf("%.0lf\n", 1.0); 将打印 1.0 但系统可能会等待 1

【讨论】:

  • 绝对是要检查的第一件事。系统正在等待十进制数,没有浮点数
猜你喜欢
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多