阿里31号游戏开发笔试最后一题求助

题是这样的:给一个数n(n>=1),再给一个数组[1,2,3,...,k]。问,用数组中的数,有多少种方法能让n变成0。

从记忆化就能20%了,但是超内存,翻译成dp还是超内存(毕竟都O(nk))。
之后写了个队列O(k)的方法,用例都对,一提交0%,麻了,不知道错哪了。

```
    if(n<k)
    {
        std::cout<<(1<<(n-1))<<std::endl;return;
    }
    queue<unsigned long long> q;
    q.push(1);
    unsigned long long now_sum = 1;
    for (unsigned long long hp = 1; hp < n; hp++)
    {
        unsigned long long sum = now_sum % 998244353;
        q.push(sum);
        now_sum += sum;
        now_sum = now_sum % 998244353;
        if (q.size() > k)
        {
            unsigned long long pop_num = q.front(); q.pop();
            now_sum = now_sum - pop_num;
        }
    }
    std::cout << now_sum << std::endl;
```
全部评论
我也遇到过提交了0%的情况,可能是代码有问题
点赞 回复 分享
发布于 2023-06-01 09:33 广东
阿里招聘还没结束啊
点赞 回复 分享
发布于 2023-05-31 22:49 江苏

相关推荐

09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务