首页 > 其他分享 >动态规划--线性dp

动态规划--线性dp

时间:2024-02-03 22:22:25浏览次数:25  
标签:数字 -- 样例 整数 int 序列 线性 dp

线性dp

动态规划步骤:

1.状态表示

用几维度的数组,每一维度的意思。

2.状态计算

状态转移方程

 

 

 

题目:

数字三角形

给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。

        7
      3   8
    8   1   0
  2   7   4   4
4   5   2   6   5

输入格式

第一行包含整数 n,表示数字三角形的层数。

接下来 n 行,每行包含若干整数,其中第 i 行表示数字三角形第 i 层包含的整数。

输出格式

输出一个整数,表示最大的路径数字和。

数据范围

1≤n≤500
−10000≤三角形中的整数≤10000

输入样例:

5
7
3 8
8 1 0 
2 7 4 4
4 5 2 6 5

输出样例:

30

 

 

查看代码

 #include<bits/stdc++.h>
using namespace std;
int main(){
    int a[600][600];
    int dp[600][600];
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
       dp[i][1]=a[i][1]+dp[i-1][1];
        for(int j=2;j<i;j++){
            dp[i][j]=a[i][j]+max(dp[i-1][j],dp[i-1][j-1]);
        }
        dp[i][i]=a[i][i]+dp[i-1][i-1];
    }
    int m=dp[n][1];
    for(int i=1;i<=n;i++){
        if(m<dp[n][i])m=dp[n][i];
    }
    cout<<m;
    return 0;
}

状态表示:dp[i][j]表示到元素(i,j)的最大路径长

状态计算:

//一般情况

 dp[i][j]=a[i][j]+max(dp[i-1][j],dp[i-1][j-1]);

 

特殊情况

行首元素:

dp[i][1]=a[i][1]+dp[i-1][1];

行末元素:

 dp[i][i]=a[i][i]+dp[i-1][i-1];

题目:

最长上升子序列

 

给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。

输入格式

第一行包含整数 N。

第二行包含 N个整数,表示完整序列。

输出格式

输出一个整数,表示最大长度。

数据范围

1≤N≤1000
−109≤数列中的数≤109

输入样例:

7
3 1 2 1 8 5 6

输出样例:

4

补充知识:

子序列:

从原序列删除一些元素剩余元素组成的序列是子序列。

子串:

要是原序列中连续截取的。

子串的长度:0~总长

这道题输入数字的下标从1开始。

 

查看代码
#include<bits/stdc++.h>
using namespace std;
long long int a[1200];
long long int f[1200];
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){  
   f[i]=1;
        for(int j=1;j<=i-1;j++){ 
          
          if(a[j]<a[i]) f[i]=max(f[i],f[j]+1);
        }
    }
    int m=f[1];
    
    for(int i=1;i<=n;i++){
      if(m<f[i])  m=f[i];
    }
    cout<<m;
   
    return 0;
}

动态规划:

状态表示:

f[i]表示以i结尾的序列长度

最后遍历i=1~n,找最长的子序列长度。

状态计算:

计算f[i]的方法是:

求得0~i-1结尾的子序列长+1,如果这个数比第i个数小就进行这个

if(a[j]<a[i])f[i]=max(f[i],f[j]+1);

注意特殊情况:以每个数字结尾的子序列长最短为1,所以每个数字结尾初始化为1.

 

标签:数字,--,样例,整数,int,序列,线性,dp
From: https://www.cnblogs.com/luckyyaoyao/p/17981332

相关文章

  • 第一章:初识数据库
    第一章:初识数据库本章主要讲解数据库安装和数据库基本介绍,考虑易用性及普及度,本课程采取mysql进行教学。1.1初识数据库数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。该数据集合称为数据库(Database,DB)。用来管理数据库的计算机系统称为数据库管......
  • 还在用QQ微信截图?这款神器你值得拥有
    在这个网络十分发达的时代,QQ、微信的使用已经十分普遍,所以大多数人都经常使用QQ和微信截图。但是,你是否遇到过这样的困难:着急截一个图,还得先登录微信QQ?微信QQ截图功能不够强大?这时候,肯定有人说,Snipaste不香吗,要微信QQ截图有什么用?的确,但是Snipaste是收费的,时不时会弹出一些提......
  • AtCoder Beginner Contest 339
    A-TLD(abc339A)题目大意给一个网址,问它的后缀是多少。解题思路找到最后的'.'的位置,然后输出后面的字符串即可。python可以一行。神奇的代码print(input().split('.')[-1])B-Langton'sTakahashi(abc339B)题目大意二维网格,上下左右相连,左上原点。初始全部为......
  • 大胆假设小心验证——cf_922_C. XOR-distance
    目录问题概述思路想法参考代码问题反思问题概述给出整数a、b、r,要求输出|(a^x)-(b^x)|的绝对值,其中0<=x<=r(取值都是[0,1e18])思路想法首先是一个位置关系,由于求的是绝对值,所以我们可以假定a>b;第二,我们要做的是异或操作,因此可以将a和b的二进制数写出来,结合异或的特点,可以发......
  • 在Unity中快速生成基于模板的Lua脚本
    在学习Xlua时,这个工具提供了一个简单而强大的方式来快速生成基于模板的Lua脚本,有助于提高开发效率和保持代码的一致性。1.xlua框架导入在GitHub上搜索xlua,找到腾讯的xlua项目,下载项目的压缩包。然后将压缩包里的Plugins和XLua这两个文件夹导入Unity的Assets目录下,如下图所示:2.......
  • CF1677E Tokitsukaze and Beautiful Subsegments
    (题目传送门)你就算再怎么套路我也做不出来……看到\(\maxa_k\),根据套路想到用单调栈处理出\(a_i\)左边第一个比它大的位置\(pre_i\),右边第一个比它大的位置\(nxt_i\)。枚举最大值\(a_i\)考虑它的贡献,显然若存在\(j,k\)满足\(nxt_i<j,k<pre_i\)且\(a_j\timesa_k=a......
  • ABC339 题解
    AK了。A-TLD给出一个字符串\(s\),输出最后一个.后面的内容。\(|s|\le100\)。\(\text{2sec/1024MB}\)。按照题意模拟即可,时空复杂度均为\(\mathcal{O}(|s|)\)。ACCodeB-Langton'sTakahashi给出\(H\timesW\)的网格。初始你在\((1,1)\),方向......
  • ABC 339 破防记
    我是沙波。嘿!A好难。Code#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;intmain(){ ios::sync_with_stdio(false); cin.tie(0); strings; cin>>s; stringt=s; reverse(t.begin(),t.end()); stringx; for(inti=0;i<t.s......
  • 2.3寒假每日总结25
    nginx平滑升级1,当前版本查看[root@localhostsbin]#./nginx-V2,解压新版本安装包tar-zxvfnginx-1.20.2.tar.gz3,进入新版安装包文件cdnginx-1.20.2/4,初始化(若是添加新模块,可在后面追加模块名称)./configure--prefix=/usr/local/nginx--conf-path=/usr/local/......
  • 青雨
    试图透过淋浴的水幕看清眼前的一切等到我自己生活了就洗不了这样的澡了907年,朱温灭唐,改国号为梁,史称后梁无所谓我早已占据南平的高地数年几乎没有什么事情不每况愈下的捏仍然标榜着“期待”的我已没什么可期待了《青雨》是自己写的日语俳句异色瞳杯要投的长诗也叫这个名字......