如何解决超过时间限制的问题

嗨,给定的代码在这里

int a, b, c, d, e, f;
int fn( int n ) {
    if( n == 0 ) return a;
    if( n == 1 ) return b;
    if( n == 2 ) return c;
    if( n == 3 ) return d;
    if( n == 4 ) return e;
    if( n == 5 ) return f;
    return( fn(n-1) + fn(n-2) + fn(n-3) + fn(n-4) + fn(n-5) + fn(n-6) );
}
int main() {
    int n, caseno = 0, cases;
    scanf("%d", &cases);
    while( cases-- ) {
        scanf("%d %d %d %d %d %d %d", &a, &b, &c, &d, &e, &f, &n);
        printf("Case %d: %d\n", ++caseno, fn(n) % 10000007);
    }
    return 0;
}

它有两个问题。一个是 整数溢出. 另一个是 超出时间限制. 我用 长int。 但问题是时间。当我提交代码时,在线判断显示为 超出时间限制. 请帮我解决这个问题。

解决方案:

这看起来是一个很标准的动态编程问题,关键是要记住你的函数。由于这是一个问题,我不会提供任何代码,但我会解释你必须做什么。你应该维护一个值的数组,在从你的函数返回之前,你用返回值更新数组中的值。在函数开始时,你检查该数组是否已经有了返回值,如果有,那么你就可以直接返回该值。

在这里阅读更多关于memoization的内容.

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何解决cytargetlinker中的响应代码500?

2022-9-8 3:51:35

未分类

如何在文本框中实时显示日志?

2022-9-8 3:51:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索