AcWing 895. 最長上升子序列(線性dp)

問題描述
給定一個長度為N NN的數列,求數值嚴格單調遞增的子序列的長度最長是多少。

輸入格式:
第一行包含整數N NN。

第二行包含N NN個整數,表示完整序列。

輸出格式:
輸出一個整數,表示最大長度。

數據范圍
1 ≤ N ≤ 1000 , 1≤N≤1000,1≤N≤1000,
? 109 ≤ 數 列 中 的 數 ≤ 109 ?109≤數列中的數≤109?109≤數列中的數≤109

輸入樣例:
7
3 1 2 1 8 5 6
1
2
輸出樣例:
4
1
思路
1、可以使用dp的方式進行求解。
2、分為狀態表示和狀態計算,狀態表示所表示的集合是所有以第i個數結尾的上升子序列。
3、極端情況:f[i] = 1恒成立 因為在當只有一個以第i個數結尾的時候就是1;
4、當滿足f[j] < f[i] 的時候 即 滿足上升的性質 后面一個數比前面一個數字大,則可以使用狀態轉移方程式 f[i] = max(f[i], f[j] + 1) 理解為所有以j結尾的所有的上升子序列長度的最大值為 fj + 1 即可得到最大值

#include<iostream>
using namespace std;
const int N = 1010;
int a[N], f[N]; //f[N]表示從1-n,每個下標的最長序列
int n, ans;
int main()
{cin >> n;for (int i = 1; i <= n; i++)cin >> a[i];for (int i = 1; i <= n; i++){f[i] = 1;  //首先當前下標的最長上升序列至少為1(它本身)for (int j = 1; j < i; j++){if (a[j] < a[i])  //下標j從 1~i-1 開始,如果a[j]<a[i],那么就有兩個選擇{//1-j的最長上升序列為f[j],此時a[i]又大于a[j],所以f[i]至少有f[j]+1個最長上升序列,然后取最大值f[i] = max(f[i], f[j] + 1);}}}for (int i = 1; i <= n; i++)ans = max(ans, f[i]);cout << ans << endl;return 0;
}

算法小白的學習筆記

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715466.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715466.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715466.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C++提高編程】

C提高編程 C提高編程1 模板1.1 模板的概念1.2 函數模板1.2.1 函數模板語法1.2.2 函數模板注意事項1.2.3 函數模板案例1.2.4 普通函數與函數模板的區別1.2.5 普通函數與函數模板的調用規則1.2.6 模板的局限性 1.3 類模板1.3.1 類模板語法1.3.2 類模板與函數模板區別1.3.3 類模板…

備戰藍橋杯---動態規劃的一些思想1

話不多說&#xff0c;直接看題&#xff1a; 目錄 1.雙線程DP 2.正難則反多組DP 3.換個方向思考&#xff1a; 1.雙線程DP 可能有人會說直接貪心&#xff1a;先選第1條的最優路徑&#xff0c;再選第2條最優路徑。 其實我們再選第1條時&#xff0c;我們怎么選會對第2條的路徑…

FastJson中“$ref 循環引用檢測”的問題

今天在測試時&#xff0c;錯誤停留在了以下的代碼行 Object object new ObjectMapper().readValue(JSON.toJSONString(procInst.getForm()), Object.class); 報錯信息&#xff1a;com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field &quo…

linux命令行與shell腳本大全——學習筆記(1-4章)

第一章、第二章 查看運行層級 runlevel 目前有7個層級&#xff0c;3是有聯網的多用戶模式&#xff0c;5是配有GUI的多用戶模式&#xff0c;等等 第三章 啟動shell 查看/etc/passwd文件&#xff0c;可以看到每個用戶的默認shell程序&#xff0c;如: christine:x:1001:1001:…

面條機水箱低液位提醒功能如何實現

光電液位傳感器在面條機水箱低液位功能的實現中發揮著重要作用。該技術通過光學原理和分離式設計&#xff0c;實現了面條機水箱液位的精準檢測和智能控制&#xff0c;為面條生產提供了穩定的保障。 采用分離式液位傳感器&#xff0c;將菱鏡部分設計直接置于面條機水箱上&#…

nvidia a100-pcie-40gb環境安裝

1.conda create --name torch_li python3.8 2. conda install pytorch1.7.1 torchvision0.8.2 torchaudio0.7.2 cudatoolkit11.0 -c pytorch 環境測試&#xff1a;torch.cuda.is_available() 3.conda remove -n torch_li --all 4.pip install opencv-python-headless 5.pip ins…

SOCKS55代理與Http代理有何區別?如何選擇?

在使用IPFoxy全球代理時&#xff0c;選擇 SOCKS55代理還是HTTP代理&#xff1f;IPFoxy代理可以SOCKS55、Http協議自主切換&#xff0c;但要怎么選擇&#xff1f;為解決這個問題&#xff0c;得充分了解兩種代理的工作原理和配置情況。 在這篇文章中&#xff0c;我們會簡要介紹 …

overleaf上傳到arxiv 參考文獻無法引用(?)

記一下overleaf上傳到arxiv的bug 參考文獻無法引用&#xff08;&#xff1f;&#xff09; 因為需要上傳bbl文件而不是bib 用overleaf生成bbl 另外需要將bbl和txt的文件名設置成一樣的

Linux筆記--解壓縮

一、tar指令 Linux打包文件通常以.tar結尾&#xff0c;壓縮文件以.gz(.bz2)結尾。通常壓縮和打包是一起進行的&#xff0c;打包壓縮后文件后綴名一般為.tar.gz。 z∶使用gzip進行解壓縮 j:使用bzip2進行解壓縮 c: create&#xff0c;創建文件 x : extract&#xff0c;解壓 v:…

RocketMQ消息積壓如何處理

在高并發的場景下&#xff0c;由于消息產生速度超過消費速度&#xff0c;可能會導致消息積壓的問題。本文將介紹 RocketMQ 消息積壓的原因和如何處理積壓問題。 什么是消息積壓 消息積壓是使用 MQ 消息隊列系統中&#xff0c;最常見的一種性能問題。如下圖所示&#xff0c;當生…

2、Redis-Hash【常用】

目錄 一、Hash和String的區別 二、常用命令與演示 三、Redis中Hash類型應用場景 一、Hash和String的區別 這是String, keyvaluenameTrxcx 這是Hash&#xff0c; keyvaluestudentTrxcxnameTrxcxage21sexmale 可以明顯的看出&#xff0c;String的value就是一條數據&#…

手動實現一個簡單的 HTTP 請求

本文我們通過 Socket&#xff0c;寫一個 HTTP 協議&#xff0c;直觀的感受一下上篇文章中的請求和響應。 定義 socket server 通過上篇文章&#xff0c;我們知道 HTTP 協議底層是通過 Socket 實現的&#xff0c;所以我們先通過 socket 定義一個 server import socket#初始化 …

復試PAT乙級day34

1111~1115 1113 很難&#xff0c;看了題解 人類習慣用 10 進制&#xff0c;可能因為大多數人類有 10 根手指頭&#xff0c;可以用于計數。這個世界上有一種叫“錢串子”&#xff08;學名“蚰蜒”&#xff09;的生物&#xff0c;有 30 只細長的手/腳&#xff0c;在它們的世界里…

【探索AI】十六 深度學習之第2周:深度神經網絡(五)實踐與應用

實踐與應用 實現步驟 當您想要使用深度學習框架構建簡單的深度神經網絡并進行訓練與評估時&#xff0c;您可以按照以下步驟進行操作&#xff1a; 步驟一&#xff1a;選擇深度學習框架 選擇您熟悉或希望學習的深度學習框架&#xff0c;比如TensorFlow、PyTorch、Keras等。 …

算法題目跟連系列之“手把手刷鏈表”

第一道 題目&#xff1a;https://leetcode.cn/problems/partition-list/description/ 86 Partition List 這個題解決的時候&#xff0c;無非就是把鏈表中小于X的元素摘出來形成一個鏈表&#xff0c;同時也把大于等于X的元素摘出來形成另外一個鏈表。最后把這兩個鏈表合并。這個…

卷積神經網絡介紹

卷積神經網絡(Convolutional Neural Networks&#xff0c;CNN) 網絡的組件&#xff1a;卷積層&#xff0c;池化層&#xff0c;激活層和全連接層。 CNN主要由以下層構造而成&#xff1a; 卷積層&#xff1a;Convolutional layer&#xff08;CONV&#xff09;池化層&#xff1a…

docker報錯 fatal error: runtim: out of memory

fatal error: runtim: out of memory 真無語了 系統內存也夠用 原來是虛擬機的不夠用了 &#xff08;原本1g已經加到2g還是會報錯&#xff09; 直接3臺虛擬機都加到4g

多線程(進階四:線程安全的集合類)

目錄 一、多線程環境使用ArrayList 二、多線程環境使用隊列 三、多線程環境使用哈希表 1、HashMap 2、Hashtable 3、ConcurrentHashMap (1)縮小了鎖的粒度 (2)充分使用了CAS原子操作&#xff0c;減少一些加鎖 (3)針對擴容操作的一些優化&#xff08;化整為零&#xff…

maven 項目的創建入門

拓展閱讀 maven 包管理平臺-01-maven 入門介紹 Maven、Gradle、Ant、Ivy、Bazel 和 SBT 的詳細對比表格 maven 包管理平臺-02-windows 安裝配置 mac 安裝配置 maven 包管理平臺-03-maven project maven 項目的創建入門 maven 包管理平臺-04-maven archetype 項目原型 ma…

藍橋杯Python B組練習——python復習2

藍橋杯Python B組練習——python復習2 一、簡介 復習python&#xff0c;參考書《Python編程從入門到實踐》&#xff0c;[美]Eric Mathes著。前一部分見專欄——藍橋杯Python B組練習 這一部分不全&#xff0c;不想寫了 二、字典 1.一個簡單的字典 來看一個游戲&#xff0…