首页 > 其他分享 >动态规划

动态规划

时间:2023-03-11 11:46:11浏览次数:57  
标签:i1 i2 j1 j2 int 动态 规划 AcWing

dp

 

 数字三角形

例题1:

AcWing 1015. 摘花生 - AcWing

题意:

从(1,1)到(r,c)摘花生,不可走回头路,最多可以摘多少

思路:

f[i, j]:(1,1)到(i,j)的最大摘花生数

核心代码:

        for(int i = 1; i <= r; i++)
        {
            for(int j = 1; j <= c; j++)
            {
                f[i][j] = max(f[i - 1][j], f[i][j - 1]) + a[i][j];
            }
        }

        cout << f[r][c] <<'\n';

例题2

1027. 方格取数 - AcWing题库

题意:

从(1,1)到(n,n)在每一个方格中取数,方格中数被取后数变成0,可走两次,问可取最大数为几

思路:

用两次dp无法确定是否是最优解

用f[i1][j1][i2][j2]表示从(1,1)开始同时走分别走到(i1,j1)(i2,j2)的最大取数

i1+j1=i2+j2时才是同时走的

设k = i1+j1

用三维dp,f[k][i1][i2]求解(横纵坐标和为k时,纵坐标走的i1,i2的时候,最大取数)

核心代码:

    for (int k = 2; k <= n + n; k ++ )
        for (int i1 = 1; i1 <= n; i1 ++ )
            for (int i2 = 1; i2 <= n; i2 ++ )
            {
                int j1 = k - i1, j2 = k - i2;
                if (j1 >= 1 && j1 <= n && j2 >= 1 && j2 <= n)
                {
                    int t = w[i1][j1];
                    if (i1 != i2) t += w[i2][j2];
                    int &x = f[k][i1][i2];
                    x = max(x, f[k - 1][i1 - 1][i2 - 1] + t);
                    x = max(x, f[k - 1][i1 - 1][i2] + t);
                    x = max(x, f[k - 1][i1][i2 - 1] + t);
                    x = max(x, f[k - 1][i1][i2] + t);
                }
            }

    printf("%d\n", f[n + n][n][n]);

最长上升子序列(LIS)

例题1

895. 最长上升子序列 - AcWing题库

f[i] :所有以a[i]结尾的单调上升子序列长度最大值

核心代码:

    for(int i = 1; i <= n; i++)
    {
        f[i] = 1;
        for(int j = 1; j < i; j++)
        {
            if(a[i] > a[j]) f[i] = max(f[i], f[j] + 1);
        }
    }

    int ans = 0;

    for(int i = 1; i <= n; i++)
    {
        ans = max(ans, f[i]);
    }

    printf("%d", ans);

 

标签:i1,i2,j1,j2,int,动态,规划,AcWing
From: https://www.cnblogs.com/lys-blogs123/p/17204676.html

相关文章

  • 科学作息饮食规划
    24小时人体机能:时间区间身体状态1:00人体进入浅睡阶段,易醒,此时头脑比较清楚,熬夜者想睡反而睡不着2:00绝大多数器官处于一天中工作最慢的状态,肝脏在紧张工作,生......
  • Java动态代理
    前言这周工作比较忙,在学习上面就温习了一下动态代理,以前也看过这块的知识,但是一直没有动手去写下代码。学习就是这样,不动手写一写总有种没有掌握的感觉,记录下这个学习过程......
  • P1433 吃奶酪 标签: 动态规划,dp | 状态压缩
    详见:https://www.luogu.com.cn/problem/P1433就不写基础原理了,直接看注释吧点击打开非map版#include<iostream>#include<cstdio>#include<cmath>#include<alg......
  • 代码随想录算法Day38 | 动态规划理论基础 ,509. 斐波那契数 ,70. 爬楼梯 ,746. 使用最
    动态规划理论基础动态规划五步曲:确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组509.斐波那契数题目链接:509.斐......
  • 代码随想录算法训练营Day38 动态规划
    代码随想录算法训练营代码随想录算法训练营Day38动态规划|理论基础509.斐波那契数70.爬楼梯746.使用最小花费爬楼梯理论基础动态规划,英文:DynamicProgramming,简......
  • Linux 动态库
    Linux的可执行文件一般是elf格式的,在这个可执行文件的头部包含了很多重要的信息:如文件格式,加载地址,符号表等。当链接器链接生成可执行文件时,会将程序的加载地址写入可执行......
  • 解锁ChatGPT超高级玩法,展示动态图片,纯干货分享!
    文/ 韩彬 这段时间在玩ChatGPT,总是文字,我有点玩腻了,突然想让ChatGPT返回一张图片,可是它却答复: 很抱歉,作为一个语言模型,我无法展示图片。但你可以在搜索引擎中搜索......
  • ABP 动态 WebApi 隐藏接口的方法(一)
    在ABP实际开发过程中既有可能会遇到不希望将某些方法暴露,那么就需要想办法将接口隐藏起来。方法一:通过修改修饰符实现。例如将方法修改为private,这种方式比较常用。但这......
  • 视频直播源码,前端canvas动态验证码实现
    视频直播源码,前端canvas动态验证码实现  //生成一个随机数  constrandomNum=(min:number,max:number)=>{    returnMath.floor(Math.random()*......
  • 如何规划并实施软件测试?
    测试计划是在对需求进行充分的理解后,将具体的测试对象、测试依赖的前提条件、测试目的、测试情景等基本信息确定下来,指导后续测试工作的开展。在此基础上,对软件测试所......