腾讯音乐906

第一题和第三题a了,第二题过了5%,想不出来有啥问题,有大佬帮忙瞅瞅咋回事吗?

    public int kawaiiStrings(int n) {
        if (n < 4) return 0;
        // write code here
        long[][] arr = new long[n + 1][3]; // arr[i] 表示 以 r e d 结尾的合法数量
        long mod = 1000000007;
        arr[4][0] = 0;
        arr[4][1] = 0;
        arr[4][2] = 3;
        for (int i = 5; i < n + 1; i++) {
            // i 为 r/e 时,i-1 可以为 r/e/d
            arr[i][0] = arr[i - 1][0] + arr[i - 1][1] + arr[i - 1][2];
            arr[i][1] = arr[i - 1][0] + arr[i - 1][1] + arr[i - 1][2];

            // 此时 i 为 d,i-1 可以为 r/d;i-1 为 e 时,i-2 只能为 e/d
            // arr[i-1][2]  以 dd 结尾
            // arr[i-1][0]  以 rd 结尾
            // arr[i-2][1]  以 eed 结尾
            // arr[i-2][2]  以 ded 结尾
            arr[i][2] = arr[i - 1][2] + arr[i - 1][0] + arr[i - 2][1] + arr[i - 2][2];


            arr[i][0] %= mod;
            arr[i][1] %= mod;
            arr[i][2] %= mod;
        }

        long res = (arr[n][0] + arr[n][1] + arr[n][2]) % mod;
        return (int) res;
    }

#腾讯音乐笔试##悬赏#
全部评论
看解析
点赞 回复 分享
发布于 2023-09-16 14:01 安徽
想问下 大佬投的什么岗
点赞 回复 分享
发布于 2023-09-07 15:10 广东
return 0 也是5%
点赞 回复 分享
发布于 2023-09-07 12:55 江苏
你这个只考虑了从合法的状态转移。从不合法的状态(不包含red子序列)也是能转移过来的。像reeeed这种就没有统计进去
点赞 回复 分享
发布于 2023-09-06 23:52 上海
可以给看一下第一第三题的思路嘛?第一题应该用的回溯,第三用的dp,但写的都不好
点赞 回复 分享
发布于 2023-09-06 23:41 江西
这样无法保证一定存在red子序列吧?
点赞 回复 分享
发布于 2023-09-06 22:29 湖北
高手,第二题完全没想法 可能是你递推中的累加过程溢出了,最后求一下余并不能避免
点赞 回复 分享
发布于 2023-09-06 22:09 广东
动规好像不太好弄 ,我一直推转移方程都只能5%,只能暴力拿20%了
点赞 回复 分享
发布于 2023-09-06 21:59 浙江

相关推荐

03-26 15:18
已编辑
华北水利水电大学 Java
点赞 评论 收藏
分享
评论
1
5
分享

创作者周榜

更多
牛客网
牛客企业服务