首页 > 其他分享 >关于动态规划(Dynamic Programming)的若干思考 ------ [2.线性dp]

关于动态规划(Dynamic Programming)的若干思考 ------ [2.线性dp]

时间:2024-02-17 16:35:49浏览次数:21  
标签:int Programming LIS Dynamic 线性 maxn ans ------ dp

线性dp的两个经典题目:
最长上升子序列(LIS)and 最长公共子序列(LCS)
1.LIS

核心代码
#include <bits/stdc++.h>
using namespace std;
const int maxn =2024;
int cnt=0,ans=1;
int f[maxn],a[maxn],c[maxn];
void out(int x)
{
	if(x==0) return ;
	out(c[x]);
	cout << a[x] <<' ';
}
int main()
{
	int x=0,y=0;
	while(scanf("%d",&x)!=EOF) a[++cnt] = x; 
	for(int i=1;i<=cnt;i++)
	{
		f[i]=1;
		for(int j=1;j<i;j++)
		{
			if(a[i]>a[j] && f[i]<f[j]+1)
			{
				f[i]=f[j]+1;
				c[i]=j;
			
			}	
			if(ans<f[i])
			{
				ans=f[i];
				y=i;
			}
		}
	}
	cout  << ans <<endl;
	out(y);
   return 0;
}

2.LCS

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=2024;
int f[maxn][maxn];
char a[maxn],b[maxn];
int main()
{
	int ans=0;
    cin >> a >> b;
    for(int i=1;i<=strlen(a);i++)
	{
        for(int j=1;j<=strlen(b);j++)
		{
            if(a[i-1]==b[j-1])	f[i][j]=f[i-1][j-1]+1;
            else f[i][j]=0;
            ans=max(ans,f[i][j]);
        }
    }
    cout << ans;
    return 0;
}

标签:int,Programming,LIS,Dynamic,线性,maxn,ans,------,dp
From: https://www.cnblogs.com/lovey24/p/18018094

相关文章

  • Python-彩色正方形
    最终成果代码importturtleast#设置画笔的大小t.pensize(20)#隐藏方向箭头t.hideturtle()#第1条边t.pencolor('red')t.forward(100)#第二条边t.pencolor('green')t.right(90)t.forward(100)#第三条边t.pencolor('blue')t.right(90)t.forward(100)......
  • 并发编程防御装-锁(基础版)
    并发编程防御装-锁(基础版)大家好,我是小高先生。在Java并发编程的世界中,锁的地位至关重要。它就像是一道坚固的防线,确保了并发编程运行结果的正确性。你可以不准备攻击装备,但是锁这个防御装备是必不可少的。相信大家在之前都对锁或多或少有些了解,本文将带领大家学习锁的基础知识。......
  • 手把手教你如何下载新东方在线上面已购买的视频课程
    前言:很多同学都想知道新东方在线上的视频课程怎么下载,但是新东方在线上面已购买的视频课程是不提供直接下载方式的,所以下面就教大家如何用学无止下载器下载新东方在线上面已购买的视频课程。一、电脑网页打开新东方在线官网(https://study.koolearn.com/my),进入我的课程二、找到......
  • 鸿蒙应用开发工程师招聘多吗?工资有多少呢?
    随着鸿蒙操作系统的快速普及,越来越多的企业开始重视鸿蒙应用开发人才的培养和引进。那么,目前市场上鸿蒙应用开发工程师招聘多吗?工资有多少呢?首先,我们来了解一下鸿蒙应用开发工程师的招聘情况。随着鸿蒙操作系统的广泛应用,越来越多的企业开始意识到鸿蒙应用开发的重要性,纷纷加大招......
  • 线性dp
    基本应用:最长上升子序列:题目描述设有由n个不相同的整数组成的数列,记为:b(1)、b(2)、……、b(n)且b(i)<>b(j)(i<>j),若存在i1<i2<i3<…<ie且有b(i1)<b(i2)<…<b(ie)则称为长度为e的不下降序列。程序要求,当原数列出之后,求出最长的上升序列。例如13,7,9,16,38,24,37,18,44,19,21,22,63......
  • 手把手教你如何下载高途和途途上面已购买的视频课程
    前言:很多同学都想知道高途课堂/途途课堂/高途高中规划的视频课程怎么下载,但是高途上面已购买的视频课程是不提供直接下载方式的,所以下面就教大家如何用学无止下载器下载高途上面已购买的视频课程。一、下载器首页输入G回车,再输入对应的APP序号并按回车,提示登录,再输入Y登录对应的......
  • 2024.2.17模拟赛T1题解
    先考虑\(q=(1...n)\)的情况:发现如果设\(divcnt(p)\)表示将\(p\)划分为极小值域连续段的个数,那满足\(divcnt(p)\gem\)的排列都是合法的。那现在要求出有多少个排列符合条件可以先算出长度为\(i\),\(divnct\)为\(1\)的排列个数,这可以用dp解决然后再背包一下,就能求......
  • 中端知识和工具+字符设备和块设备+LMA和VMA+gdb查看系统调用+vim查看指定文件链接的au
    中端知识和工具https://www.cnblogs.com/yjw951012/p/12865036.html抖动(Jitter)和偏移(skew)信号周期的长度总会有一定变化,从而导致下一个沿的到来时间不确定。这种不确定就是抖动(jitter)。因时钟线长度不同或负载不同,导致时钟到达相邻单元的时间不同,这个时间上的偏差就叫时钟偏......
  • dp总结(背包,线性,区间,坐标,树形)
    背包dp0/1背包这种背包会提供可选的物品,背包的容积以及每件物品的价值,并且在选择物品是每件物品只有选一件或不选两种状态。例题输入4512243445输出8二维解法代码//状态转移方程为:f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i])#include"bits/stdc++.h"using......
  • 坐标dp
    坐标dp典型例题:传纸条题目描述小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传......