• 动态规划——力扣刷题总结


    70,爬楼梯
    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
    简单题:设第n阶的方法为 f ( x ) f(x) f(x),则有 f ( x ) = f ( x − 1 ) + f ( x + 2 ) f(x)=f(x-1)+f(x+2) f(x)=f(x1)+f(x+2)
    代码;

    class Solution {
    public:
        int fn[46];
        int climbStairs(int n) {
            fn[1]=1;
            fn[2]=2;
            for(int i=3;i<=n;i++)
            {
                fn[i]=fn[i-1]+fn[i-2];
            }
            return fn[n];
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    53,最大数组和
    设置一个前缀和sum,当sum+x小于x时,即连续数组包括此x值时,不满足题意,将前缀和重新从x开始。
    取sum的最大值
    代码:

    class Solution {
    public:
        int maxSubArray(vector& nums ) {
            int n=nums.size();
            int sum=0;
            int ans=-999999999;
            for(int i=0;i
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1706 球会落到何处
    对每一层情况进行分析,当前层的位置是有上一层的挡板情况确定,分析清楚什么时候右移一个位置,什么时候左移,什么时候卡在挡板处即可
    代码:

    class Solution {
    public:
        vector findBall(vector>& grid) {
            int col=grid[0].size();
            int row=grid.size();
            vectorans(col,0);
            for(int i=0;i=0&&grid[i][ans[j]-1]!=1)
                {
                    ans[j]--;
                }
                else{
                    ans[j]=-1;
                }
            }
            return ans;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    1420 生成数组
    设方法数为 f ( n , s , j ) s f(n,s,j)s f(n,s,j)s表示search_cost,n表示第几个数,j表示取何值。
    f ( n , s , j ) = f ( n − 1 , s , j ) ∗ j + ∑ i = 1 x f ( n − 1 , s − 1 , s ( s < j ) ) f(n,s,j)=f(n-1,s,j)*j+\sum_{i=1}^{x}f(n-1,s-1,s(sf(n,s,j)=f(n1,s,j)j+i=1xf(n1,s1,s(s<j)
    代码:

    class Solution {
    private:
    int mod=1000000007;
    int f[51][51][1000];
    int ans=0;
    public:
        int numOfArrays(int n, int m, int k) {
            for(int i=1;i<=m;i++)
            {
                f[1][1][i]=1;
            }
            for(int i=2;i<=n;i++)
            for(int s=1;s<=k&&s<=i;s++)
            for(int j=1;j<=m;j++)
            {
                f[i][s][j]=(long long)f[i-1][s][j]*j%mod;
                for(int temp=1;temp
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    【图解计算机网络】从浏览器地址输入到网页显示的整个过程
    Dubbo的前世今生
    App上架小米应用商店
    ZYNQ的程序固化
    【赠书活动】AI时代项目经理必备技能
    Python装饰器通俗理解
    ​iOS安全加固方法及实现
    云南师范大学计算机考研资料汇总
    契约锁集成近20种人事软件,助力HR网上签署“入转调离”文件
    Chapter9.5:线性系统的状态空间分析与综合考研参考题
  • 原文地址:https://blog.csdn.net/liuwenhao_1/article/details/130912115