首页 > 其他分享 >经典dp问题

经典dp问题

时间:2024-09-25 18:46:44浏览次数:9  
标签:www cn int 问题 经典 序列 using dp

本人的第一篇博客,记录一些经典dp问题(待更新)


lis(最长上升子序列)

给定一个长为n的序列ai,求这个序列的最长单调上升子序列长度
例:a={1,2,4,1,3,4}
做法一(n^2)
设dp[i]=以a[i]结尾的子序列中,最长的上升子序列的长度
如在该例子中dp={1,2,3,1,3,4};
动态转移方程:dp[i]=max(dp[j]+1)(j<i,a[j]<a[i])

点击查看代码
#include <iostream>
using namespace std;
const int N=5010;
int a[N],dp[N];
int main(){
    int n,ans=1;
    cin>>n;
    for(int i=1;i<=n;++i) cin>>a[i],dp[i]=1;
    for(int i=2;i<=n;++i){
        for(int j=1;j<=i-1;++j){
            if(a[j]<a[i]) dp[i]=max(dp[i],dp[j]+1);
        }
        ans=max(ans,dp[i]);
    }
    cout<<ans;
    
    return 0;
}

[题目](https://www.luogu.com.cn/problem/B3637)

做法二(nlogn)
试着反过来思考,设dp[i]=长度为i的上升子序列的结尾的最小元素
如在该例子中dp={1,2,3,4,∞,∞};
可以发现该数组是单调递增的
不妨考虑从小到大递推,二分dp中最大的小于a[i]的dp[j],更新dp[j+1]

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],b[N],dp[N],ys[N],ans;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;++i) cin>>a[i];
	memset(dp,0x3f,sizeof(dp)); dp[0]=0;
	for(int i=1,j;i<=n;++i){
		j=lower_bound(dp+1,dp+n+1,a[i])-dp; j--;
		dp[j+1]=min(dp[j+1],a[i]);
		ans=max(ans,j+1);
	}
	cout<<ans;
    
    return 0;
}

[题目](https://www.luogu.com.cn/problem/AT_chokudai_S001_h)

标签:www,cn,int,问题,经典,序列,using,dp
From: https://www.cnblogs.com/ZeldaandLink/p/18431890

相关文章

  • 【解决了一个小问题】aws s3 sdk 中的自定义header设置哪些不参与aws v4 签名
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯在通过代理访问s3服务端的时候,s3服务端返回类似的错误信息:<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><Error><Code>AuthorizationQueryParametersE......
  • 经典sql题(十二)UDTF之Explode炸裂函数
    1.EXPLODE:UDTF函数1.1功能说明EXPLODE函数是Hive中的一种用户定义的表函数(UDTF),用于将数组或映射结构中的复杂的数据结构每个元素拆分为单独的行。这在处理复杂数据时非常有用,尤其是在需要将嵌套数据“打散”以便更好地分析时。1.2使用示例假设我们有一个存储用......
  • 经典sql题(十三)炸裂对应学生的姓名和成绩
    explode和posexplode的区别explode:用于将数组中的每个元素展开为单独的行。结果中只包含元素的值,不包含其索引。如果输入数组有n个元素,结果将返回n行。posexplode:用于将数组中的每个元素展开为单独的行,同时提供每个元素的索引。结果包含两个列:一个是元素的索......
  • Excel转dbc过程中出现的问题记录
    受限于python版本,无法使用canmatrix等库于是采用excel转字符串,输出到.dbc文档的方式实现DBC信息内容参见 DBC系列之DBC格式与属性说明[1]-CSDN博客遇到的问题:1、报文的DLC范围被限制为0~8,超限的报文数据都会报错解决办法:以文本文档方式打开dbc文档,添加关键字段BA_DEF_......
  • 【缓存】热key和大key问题
    参考:Redis中BigKey和HotKey的检测及处理详解https://www.alibabacloud.com/blog/a-detailed-explanation-of-the-detection-and-processing-of-bigkey-and-hotkey-in-redis_598143?spm=a2796.7996630.8896513680.1.373a54b0xTX6yZRedis热点键发现及常见解决方案https://www.a......
  • QT5程序部署提示缺少Qt5系统库问题的解决方法 symbol lookup error /libQt5XcbQpa.so.
    https://blog.csdn.net/qq_29852231/article/details/128853681 QT5程序部署提示缺少Qt5系统库问题的解决方法问题:在用QT5.12开发程序后,部署至现场(Ubuntu18/20)发现提示缺少QT5的平台库(platform)或者系统提供的QT5平台库无法正常支撑程序运行解析:经过研究发现,即时将Platform文件......
  • 达梦空格填充导致违反唯一约束问题排查及处理
    在oracle迁移到达梦过程中,创建主键提示违法唯一约束。如下所示:用户反馈没有重复数据原因是达梦空格填充模式参数(BLANK_PAD_MODE)为0 , 查询语句将忽略字符串的后缀空格,由于大部分其他都已经迁移过去,只有个别表报错,不能重新初始化实例,需要将有问题的数据查找出来删除查找重......
  • 如何解决win11扩展属性不一致问题(华硕天选3笔记本)
    1.笔者出现该问题的原因:今天上午笔者被迫更新win11,在更新途中,笔者突然好奇更新强制关机会有什么问题呢?这一关重新启动后就出问题了,发现的问题如下:1.1:点击这种类型(就是图标右下角有个盾牌框)的文件会卡一下然后弹出错误框(大概内容)"C:\Users\ASUS\Desktop\*******"文件扩展......
  • 豆包MarsCode初体验,用 React 创建一个最经典的贪吃蛇游戏
    以下是「 豆包MarsCode 体验官」优秀文章,作者Find。背景在人工智能快速发展的时代,大模型(LLM)只要有足够的算力和数据就可以做到任何的事情,甚至可以模拟出另一个地球。LLM作为一个革命化的科技,可以取代很多岗位,甚至可以让人类达到“躺着领钱的时代”。Marscode作为一个新推出的IDE......
  • 关于动态库加载问题
    1,GetProcAddress只能加载与函数名一致的符号,如果是C++符号是无法加载函数的所以在进行动态库加载时候,如果被加载的库是C++组件,需要将接口声明添加extern“C”或者增加def文件;否则会出现GetProcAddress加载动态函数时候失败;2,查看动态库是否有符号可以使用depend工具:http://w......