首页 > 其他分享 >2024/08/19 每日一题

2024/08/19 每日一题

时间:2024-08-22 13:15:39浏览次数:9  
标签:mat 19 res 08 2024 int length static dp

LeetCode 552 学生出勤记录II

方法1:动态规划

class Solution {
    static int MOD = 1_000_000_007;
    static int MX = 1_000_01;
    static int[][][] dp = new int[MX][2][3];

    static { // 静态代码块
        dp[0][0][0] = 1; // 只有此时合法
        for (int i = 1; i < MX; i++) {
            dp[i][0][0] = add(dp[i - 1][0][0], dp[i - 1][0][1], dp[i - 1][0][2]);
            dp[i][0][1] = dp[i - 1][0][0];
            dp[i][0][2] = dp[i - 1][0][1];
            dp[i][1][0] = add(dp[i][0][0], dp[i - 1][1][0], dp[i - 1][1][1], dp[i - 1][1][2]);
            // dp[i][1][0] = dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2] + dp[i - 1][1][0] + dp[i - 1][1][1] + dp[i - 1][1][2];
            dp[i][1][1] = dp[i - 1][1][0];
            dp[i][1][2] = dp[i - 1][1][1];
        }
    }

    static int add(int... nums) {
        int res = nums[0];
        for (int i = 1; i < nums.length; i++) 
            res = (res + nums[i]) % MOD;
        return res;
    }

    public int checkRecord(int n) {
        int ans = 0;
        for (int j = 0; j <= 1; j++) {
            for (int k = 0; k <= 2; k++) {
                ans = (ans + dp[n][j][k]) % MOD;
            }
        }
        return ans;
    }
}

方法2:动态规划 + 快速幂优化

class Solution {
    static int MOD = 1_000_000_007;
    static int length = 6;

    public int checkRecord(int n) {
        int[][] mat = { {1, 1, 1, 0, 0, 0},
                        {1, 0, 0, 0, 0, 0},
                        {0, 1, 0, 0, 0, 0},
                        {1, 1, 1, 1, 1, 1},
                        {0, 0, 0, 1, 0, 0},
                        {0, 0, 0, 0, 1, 0} };
        return qpow(mat, n); // 第一列求和
    }

    static int qpow(int[][] mat, int n) {
        int[][] res = new int[length][length];
        for (int i = 0; i < length; i++) res[i][i] = 1;
        while (n > 0) {
            if ((n & 1) == 1)
                res = multiply(res, mat);
            mat = multiply(mat, mat);
            n >>= 1;
        }
        int ans = 0;
        for (int i = 0; i < length; i++) ans = (ans + res[i][0]) % MOD;
        return ans;
    }

    static int[][] multiply(int[][] arr1, int[][] arr2) {
        int[][] arr = new int[length][length];
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length; j++) {
                for (int k = 0; k < length; k++) {
                    // 保证相乘不会越界
                    arr[i][j] += mul(arr1[i][k], arr2[k][j]);
                    arr[i][j] %= MOD; // 保证后续相加不越界
                }
            }
        }
        return arr;
    }

    static int mul(int num1, int num2) {
        int res = 0;
        while (num2 > 0) {
            if ((num2 & 1) == 1)
                res = (res + num1) % MOD;
            num1 = (num1 + num1) % MOD;
            num2 >>= 1;
        }
        return res;
    }
}

标签:mat,19,res,08,2024,int,length,static,dp
From: https://www.cnblogs.com/XuGui/p/18373642

相关文章

  • 2024/08/20 每日一题
    LeetCode3154到达第K级台阶的方案数方法1:数学classSolution{staticintMX=31;staticint[][]res=newint[31][31];static{//使用计算需要开longfor(inti=0;i<MX;i++){res[i][0]=res[i][i]=1;for......
  • 2024前端高频面试之 Vue篇--初、中级
    Vue高频面试汇总(基础篇)文末有超多前端资料~已帮助500+名同学完成改造!1.说一下Vue的生命周期vue2:主要八大生命周期beforeCreate:实例创建之前,还不能访问data的属性created:实例创建完成,可以访问data的属性、一般在这个生命周期做数据请求beforeMount:模板编译之前,还没......
  • 国内外ChatGPT镜像网站集合【2024-8月最新】~
     一、GPT4o& &4.0turbo&GPT4omini介绍总有人问我,GPT4o、GPT4.0和GPT3.5有什么区别?国内怎么才能用上,听说很复杂以一张表来表达他们的区别吧GPT3.5、GPT3.5Turbo、GPT4.0均已经被官方放弃维护,也就是说我们其实已经使用不到这几个模型了。目前官方主流开放的模型有GP......
  • 一网打尽,国内外ChatGPT镜像网站集合【2024-08最新】AI编程、AI写作、AI对话、AI翻译、
    一网打尽,我经过一年多搜集的各种AI工具,使用的都是最强最新的大语言模型,都是在各自领域独领风骚的产品。1:【AI站点】AIPlus 推荐指数:⭐️⭐️⭐️⭐️⭐️推荐理由:一个AI综合网站,有多个GPT和绘画站,每个站点都很流畅且可用2:【AI编程】https://zed.dev/推荐指数:⭐️⭐️⭐️⭐️⭐️推荐理......
  • Windows 11 version 23H2 中文版、英文版 (x64、ARM64) 下载 (updated Aug 2024)
    Windows11version23H2中文版、英文版(x64、ARM64)下载(updatedAug2024)Windows11,version23H2,企业版arm64x64请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。Windows11直接上链接,详细说明请访问原文查看。⬇下载地......
  • Windows Server 2022 中文版、英文版下载 (updated Aug 2024)
    WindowsServer2022中文版、英文版下载(updatedAug2024)WindowsServer2022x64,Version21H2请访问原文链接:https://sysin.org/blog/windows-server-2022/,查看最新版。原创作品,转载请保留出处。直接上链接,详细说明请访问原文查看。下载地址WindowsServer2022LTSC......
  • Windows 10 version 22H2 (updated Aug 2024) 中文版、英文版下载
    Windows10version22H2(updatedAug2024)中文版、英文版下载Windows1022H2企业版arm64x64请访问原文链接:https://sysin.org/blog/windows-10/,查看最新版。原创作品,转载请保留出处。直接上链接,详细说明请访问原文查看。下载地址语言:简体中文、繁體中文、EnglishW......
  • 2024 江苏省第二届数据安全技术应用职业技能竞赛 初赛 部分wp
    文章目录一、前言二、参考文章三、题目(解析)数据安全解题赛1、ds_0602(30分)2、333.file(45分)3、pf文件分析(35分)4、丢失的资料(45分)5、greatphp(45分)数据安全分析赛一、简单分析1、问题一:攻击者成功登陆后台的账号密码是?(如账号为admin,密码为admin,则提交admin:admin)2、问题二......
  • 2024暑期第二次集训总结(202408)
    坐标cssyz08.12身体不适,请假在家,随便写写,把当天任务写了一下,结果你谷RMJ炸了,直接躺平。08.13上午原定9:00-12:00出去比赛,让我们8:00到,到了之后又没事做,直接与同学联机MC,后面开考,以为是csp-j难度,结果红+红+下位橙+红,14分钟秒了。(抽象)回到机房赶上思维训练,看了......
  • 题解:P10892 SDOI2024
    题解:P10892SDOI2024题目传送门题目思路通过阅读题面,我们可以看出,其实对于每一次纠结,如果交出了\(\frac{n-1}{2}\)只猫猫,则剩下的为\(\frac{n+1}{2}\)只猫猫;如果交出了\(\frac{n+1}{2}\)只猫猫,则剩下的为\(\frac{n-1}{2}\)只猫猫。为了使纠结的次数尽可能小,我们要交出......