【藍橋杯】動態規劃:線性動態規劃

1. 最長上升子序列(LIS)

1.1. 題目

想象你有一排數字,比如:3, 1, 2, 1, 8, 5, 6

你要從中挑出一些數字,這些數字要滿足兩個條件:

  1. 你挑的數字的順序要和原來序列中的順序一致(不能打亂順序)

  2. 你挑的數字要一個比一個大(嚴格遞增)

問:最多能挑出多少個這樣的數字?

比如上面這個例子:

  • 可以挑 3, 8(但長度只有2)

  • 可以挑 1, 2, 5, 6(長度是4)

  • 也可以挑 1, 2, 8(長度是3)

最長的就是4,所以答案是4

1.2. 思路(動態規劃)

我們用一個數組dp來記錄:

  • dp[i] 表示:以第i個數字結尾時,能組成的最長上升子序列的長度

比如對于序列 [3,1,2,1,8,5,6]:

  1. 第一個數字3:只能選它自己,所以dp[0]=1

  2. 第二個數字1:比3小,不能接在3后面,只能自己開頭,dp[1]=1

  3. 第三個數字2:

    • 可以接在1后面(1<2),所以長度=dp[1]+1=2

    • 不能接在3后面(3>2)

    • 所以dp[2]=2

  4. 第四個數字1:

    • 比前面的3,1,2都小,只能自己開頭

    • dp[3]=1

  5. 第五個數字8:

    • 可以接在3后面(3<8),長度=dp[0]+1=2

    • 可以接在1后面(1<8),長度=dp[1]+1=2

    • 可以接在2后面(2<8),長度=dp[2]+1=3

    • 可以接在前面的1后面(1<8),長度=dp[3]+1=2

    • 最大的是3,所以dp[4]=3

  6. 繼續計算最后兩個數字...最終dp = [1,1,2,1,3,3,4]

  7. 最大值是4,所以答案是4

1.3. 完整代碼(動態規劃)

n = int(input())  # 先讀取數字的個數
nums = list(map(int, input().split()))  # 讀取數字序列# 初始化dp數組,每個數字自己就是一個長度為1的子序列
dp = [1] * n  # 從第二個數字開始檢查(因為第一個數字的dp值肯定是1)
for i in range(1, n):# 看看前面所有數字for j in range(i):# 如果前面的數字比當前數字小,就可以接在后面if nums[j] < nums[i]:# 更新dp[i],選擇更大的值dp[i] = max(dp[i], dp[j] + 1)# 相當于說:"如果接在這個數字后面,會不會讓序列更長&#

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

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

相關文章

vue2和vue3的主要區別

一、性能優化與響應式系統 性能優化&#xff1a; Vue2&#xff1a;性能較好&#xff0c;但在大型應用中&#xff0c;當數據變化頻繁時可能出現性能瓶頸。它使用虛擬DOM來高效地進行DOM操作&#xff0c;并通過多種技術手段如懶加載、異步組件、樹形抖動等優化性能。 Vue3&…

Python: 實現數據可視化分析系統

后端基于Python 開源的 Web 框架 Flask&#xff0c;前端頁面采用 LayUI 框架以及 Echarts 圖表&#xff0c;數據庫為sqlite。系統的功能模塊分為數據采集和存儲模塊、數據處理和分析模塊、可視化展示模塊和系統管理模塊。情感分析方面使用LDA等主題建模技術&#xff0c;結合領域…

深度學習總結(3)

數據批量的概念 通常來說&#xff0c;深度學習中所有數據張量的第一個軸&#xff08;也就是軸0&#xff0c;因為索引從0開始&#xff09;都是樣本軸[samples axis&#xff0c;有時也叫樣本維度&#xff08;samples dimension&#xff09;?]?。深度學習模型不會一次性處理整個…

微軟慶祝它成立整整50周年

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【操作系統(Linux)】——通過案例學習父子進程的線程異步性

本篇旨在通過幾個案例來學習父子進程的線程異步性 一、父進程與子進程 我們將要做的&#xff1a; 創建父子進程&#xff0c;觀察父子進程執行的順序&#xff0c;了解進程執行的異步行為 源代碼&#xff1a; #include <stdio.h> #include <sys/types.h> #include…

系統性能核心指標:QPS、TPS、RT、并發量詳解

系統性能核心指標&#xff1a;QPS、TPS、RT、并發量詳解 1. 引言 在分布式系統、高并發架構設計中&#xff0c;QPS、TPS、RT、并發量 等指標是衡量系統性能的關鍵。本文深入解析這些術語的定義、計算方法、關聯性及優化策略&#xff0c;幫助開發者更好地進行系統性能評估與調…

PortswiggerLab:Exploiting a mass assignment vulnerability

實驗目標 To solve the lab, find and exploit a mass assignment vulnerability to buy a Lightweight l33t Leather Jacket. You can log in to your own account using the following credentials: wiener:peter. 官方WP In Burps browser, log in to the application using…

卡爾曼濾波器的工作原理

原文: https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/ 1 概述 你可以對某個動態系統有不確定信息的任何地方使用卡爾曼濾波器&#xff0c;并且對系統下一步的狀態做出有根據的猜測。即使出現混亂的現實狀態&#xff0c;卡爾曼濾波器都會給出一個合理的結果。…

PDFtk

如果下載的pdf文件有秘鑰的話&#xff0c;使用下面linux命令去掉秘鑰&#xff1a; pdftk 納稅記錄.pdf input_pw 261021 output 納稅記錄_output.pdf將多個單頁pdf合并為一個pdf的linux命令: pdftk 自然人電子稅務局1.pdf 自然人電子稅務局2.pdf 自然人電子稅務局3.pdf 自然人…

Openlayers:海量圖形渲染之WebGL渲染

最近由于在工作中涉及到了海量圖形渲染的問題&#xff0c;因此我開始研究相關的解決方案。我在網絡上尋找相關的解決方案時發現許多的文章都提到利用Openlayers中的WebGLPointsLayer類&#xff0c;可以實現渲染海量的點&#xff0c;之后我又了解到利用WebGLVectorLayer類可以渲…

替換jeecg圖標

替換jeecg圖標 ant-design-vue-jeecg/src/components/tools/Logo.vue <!-- <img v-else src"~/assets/logo.svg" alt"logo">-->

Codeforces Round 970 (Div. 3)題解

題目地址 https://codeforces.com/contest/2008 銳評 本次D3的前四題還是比較簡單的&#xff0c;沒啥難度區分&#xff0c;基本上差不多&#xff0c;屬于手速題。E的碼量比F大一些&#xff0c;實現略顯復雜一些。G的數學思維較明顯&#xff0c;如果很久沒有訓練這個知識點&a…

操作系統:線程間同步之事件集

事件集是線程間同步的機制之一&#xff0c;一個事件集可以包含多個事件&#xff0c;利用事件集可以完成一對多、多對多的線程間同步。 目錄 一、事件集舉例說明 二、事件集工作機制 三、RT-Thread為實例說明 四、事件集的應用場合 一、事件集舉例說明 以坐公交車為例&…

基于springboot鉆孔數據管理系統的設計與實現(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 本鉆孔數據管理系統采用B/S架構&#xff0c;數據庫是MySQL&#xff0c;網站的搭建與開發采用了先進的Java語言、Hadoop、數據可視化技術進行編寫&#xff0c;使用了Spring Boot框架。該系統從兩個對象&#xff1a;由管理員和用戶來對系統進行設計構建。用戶主要功能包括&…

全雙工分軌語音數據集:讓AI實現無縫對話

清晨&#xff0c;智能音箱根據指令-播放音樂&#xff1b;駕駛途中&#xff0c;車載助手同步處理導航與來電&#xff1b;智能會議工具無縫切換多語種對話……語音交互技術正快速融入生活。然而&#xff0c;用戶對于對話體驗追求更自然、更流暢&#xff0c;實時理解&#xff0c;動…

Python 網絡請求利器:requests 包詳解與實戰

諸神緘默不語-個人技術博文與視頻目錄 文章目錄 一、前言二、安裝方式三、基本使用1. 發起 GET 請求2. 發起 POST 請求 四、requests請求調用常用參數1. URL2. 數據data3. 請求頭 headers4. 參數 params5. 超時時間 timeout6. 文件上傳 file&#xff1a;上傳純文本文件流7. jso…

linux入門四:Linux 編譯器

一、C 語言編譯器 GCC&#xff1a;開啟編程之旅 1.1 GCC 安裝&#xff1a;一站式工具鏈 GCC&#xff08;GNU Compiler Collection&#xff09;是 Linux 下最常用的 C/C 編譯器&#xff0c;支持多種編程語言。安裝命令&#xff08;適用于 Debian/Ubuntu 系統&#xff09;&…

建筑兔零基礎自學記錄69|爬蟲Requests-2

Requests庫初步嘗試 #導入requests庫 import requests #requests.get讀取百度網頁 rrequests.get(http://www.baidu.com) #輸出讀取網頁狀態 print(r.status_code) #輸出網頁源代碼 print(r.text) HTTP 狀態碼是三位數字&#xff0c;用于表示 HTTP 請求的結果。常見的狀態碼有…

Web測試流程及注意點

在Web工程過程中&#xff0c;基于Web系統的測試、確認和驗收是一項重要而富有挑戰性的工作。基于Web的系統測試與傳統的軟件測試不同&#xff0c;它不但需要檢查和驗證是否按照設計的要求運行&#xff0c;而且還要測試系統在不同用戶的瀏覽器端的顯示是否合適。 重要的是&…

基于MATLAB/simulink的信號調制仿真--AM調制

實驗內容&#xff1a; 假設y(t)(20.5*2cos&#xff08;2*pi*1000*t&#xff09;)*5cos&#xff08;2*pi*2*1e4*t&#xff09;調幅系統&#xff0c;請將一個頻率為1000HZ的余弦波信號&#xff0c;通過進行AM調制&#xff0c;載波信號頻率為20kHZ的余弦波&#xff0c;調制度ma0.…