【藍橋杯】算法筆記3

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/web/74749.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74749.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74749.shtml

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

相關文章

性能測試之jmeter的基本使用

簡介 Jmeter是Apache的開源項目&#xff0c;基于Java開發&#xff0c;主要用于進行壓力測試。 優點&#xff1a;開源免費、支持多協議、輕量級、功能強大 官網&#xff1a;https://jmeter.apache.org/index.html 安裝 安裝步驟&#xff1a; 下載&#xff1a;進入jmeter的…

【NLP 面經 7、常見transformer面試題】

目錄 1. 為何使用多頭注意力機制&#xff1f; 2. Q和K使用不同權重矩陣的原因 3. 選擇點乘而非加法的原因 4. Attention進行scaled的原因 5. 對padding做mask操作 6. 多頭注意力降維原因 7. Transformer Encoder模塊簡介 8. 乘以embedding size的開方的意義 9. 位置編碼 10. 其…

【深度學習】CNN簡述

文章目錄 一、卷積神經網絡&#xff08;CNN&#xff09;二、CNN結構特性1. CNN 典型結構2. 局部連接3. 權重共享4.空間或時間上的次采樣 三、理解層面 一、卷積神經網絡&#xff08;CNN&#xff09; 卷積神經網絡(Convolutional Neural Network&#xff0c;CNN)是一種用于處理…

理解OSPF 特殊區域NSSA和各類LSA特點

本文基于上文 理解OSPF Stub區域和各類LSA特點 在理解了Stub區域之后&#xff0c;我們再來理解一下NSSA區域&#xff0c;NSSA區域用于需要引入少量外部路由&#xff0c;同時又需要保持Stub區域特性的情況 一、 網絡總拓撲圖 我們在R1上配置黑洞路由&#xff0c;來模擬NSSA區域…

論文閱讀筆記:Denoising Diffusion Implicit Models (5)

0、快速訪問 論文閱讀筆記&#xff1a;Denoising Diffusion Implicit Models &#xff08;1&#xff09; 論文閱讀筆記&#xff1a;Denoising Diffusion Implicit Models &#xff08;2&#xff09; 論文閱讀筆記&#xff1a;Denoising Diffusion Implicit Models &#xff08…

藍橋杯2024年第十五屆省賽真題-R 格式

題目鏈接&#xff1a; 思路&#xff1a; 通過數組模擬d的每一位&#xff0c;逐位進行計算&#xff0c;從而實現對d的精確處理。 代碼&#xff1a; #include<bits/stdc.h> #define int long long using namespace std; const int N 2020;int n; string s; vector<i…

深入探索 Linux Top 命令:15 個實用示例

在 Linux 系統管理中&#xff0c;top 命令是系統性能監控不可或缺的工具。它能夠實時顯示系統的 CPU、內存、進程等資源的使用情況&#xff0c;幫助您快速識別性能瓶頸和異常進程。本文將詳細介紹 15 個實用的 top 命令使用示例&#xff0c;旨在幫助您更高效地進行系統管理與優…

15.1linux設備樹下的platform驅動編寫(知識)_csdn

上一章我們詳細的講解了 Linux 下的驅動分離與分層&#xff0c;以及總線、設備和驅動這樣的驅動框架。基于總線、設備和驅動這樣的驅動框架&#xff0c; Linux 內核提出來 platform 這個虛擬總線&#xff0c;相應的也有 platform 設備和 platform 驅動。 上一章我們講解了傳統的…

Eclipse 視圖(View)

Eclipse 視圖(View) Eclipse 視圖(View)是 Eclipse 界面的重要組成部分,它提供了用戶交互的平臺,使得用戶可以通過圖形界面來編輯、調試、分析代碼等。在本文中,我們將深入探討 Eclipse 視圖的功能、使用方法以及它們在軟件開發中的作用。 1. 視圖的功能 Eclipse 視圖具…

Python解決“數字插入”問題

Python解決“數字插入”問題 問題描述測試樣例解題思路代碼 問題描述 小U手中有兩個數字 a 和 b。第一個數字是一個任意的正整數&#xff0c;而第二個數字是一個非負整數。她的任務是將第二個數字 b 插入到第一個數字 a 的某個位置&#xff0c;以形成一個最大的可能數字。 你…

ubuntu部署ollama+deepseek+open-webui

ubuntu部署ollamadeepseekopen-webui 全文-ubuntu部署ollamadeepseekopen-webui 大綱 Ollama部署 安裝Ollama&#xff1a;使用命令apt install curl和curl -fsSL https://ollama.com/install.sh | sh ollama-v網絡訪問配置&#xff1a;設置環境變量OLLAMA_HOST0.0.0.0:11434&…

Java的Selenium常用的元素操作API

click 觸發當前元素的點擊事件 clear() 清空內容 sendKeys(...) 往文本框一類元素中寫入內容 getTagName() 獲取元素的的標簽名 getAttribute(屬性名) 根據屬性名獲取元素屬性值 getText() 獲取當前元素的文本值 isDisplayed() 查看元素是否顯示 get(String url) 訪…

洛谷題單3-P1035 [NOIP 2002 普及組] 級數求和-python-流程圖重構

題目描述 已知&#xff1a; S n 1 1 2 1 3 … 1 n S_n 1\dfrac{1}{2}\dfrac{1}{3}…\dfrac{1}{n} Sn?121?31?…n1?。顯然對于任意一個整數 k k k&#xff0c;當 n n n 足夠大的時候&#xff0c; S n > k S_n>k Sn?>k。 現給出一個整數 k k k&#xff0…

CMDB平臺(進階篇):3D機房大屏全景解析

在數字化轉型的浪潮中&#xff0c;數據中心作為企業信息架構的核心&#xff0c;其高效、智能的管理成為企業競爭力的關鍵因素之一&#xff0c;其運維管理方式也正經歷著革命性的變革。傳統基于二維平面圖表的機房監控方式已難以滿足現代企業對運維可視化、智能化的需求。樂維CM…

小白速通:Verilog流水線實現及時序分析

目錄 題目&#xff1a;時序分析&#xff1a;時鐘頻率為50MHz數據1: a10, b20, c30, d40, e2數據2: a5, b15, c25, d35, e3數據3: a8, b12, c16, d24, e4 流水線效率分析 題目&#xff1a; verilog中&#xff0c;y(abcd)*e&#xff0c;時鐘頻率為50Mhz&#xff0c;用流水線的形式…

【RK3588 嵌入式圖形編程】-SDL2-掃雷游戲-創建網格

創建網格 文章目錄 創建網格1、概述2、更新Globals.h文件3、創建單元4、創建網格5、傳遞事件6、清空單元7、反饋單元格已清除8、測試9、完整代碼10、總結在本文中,將詳細介紹如何構建一個二維的交互式掃雷單元格網格。 1、概述 在本文中,我們將專注于構建掃雷游戲的基礎結構…

高精度矢量內積計算方法 (單精度浮點, 超長矢量)

高精度矢量內積計算方法 (單精度浮點, 超長矢量) 對于單精度浮點類型的超長矢量(超過1億元素)內積計算&#xff0c;累加誤差確實是一個重要問題。以下是幾種減少誤差的方法&#xff1a; 1. Kahan求和算法 這是最常用的補償求和算法&#xff0c;可以有效減少累加誤差&#xf…

Java基礎:Logback日志框架

什么是日志 日志技術 可以將系統執行信息&#xff0c;方便的記錄到指定位置&#xff08;控制臺&#xff0c;文件中&#xff0c;數據庫中&#xff09; 可以隨時可以開關的形式控制日志的啟停&#xff0c;無需侵入到源代碼中去進行修改 LogBack日志框架 LogBack快速入門 logb…

MessageQueue --- RabbitMQ WorkQueue and Prefetch

MessageQueue --- RabbitMQ WorkQueue and Prefetch 什么是WorkQueue分發機制 --- RoundRobin分發機制 --- PrefetchSpring example use prefetch --- Fair Dispatch 什么是WorkQueue Work queues&#xff0c;任務模型。簡單來說就是讓多個消費者綁定到一個隊列&#xff0c;共同…

RNN模型與NLP應用——(9/9)Self-Attention(自注意力機制)

聲明&#xff1a; 本文基于嗶站博主【Shusenwang】的視頻課程【RNN模型及NLP應用】&#xff0c;結合自身的理解所作&#xff0c;旨在幫助大家了解學習NLP自然語言處理基礎知識。配合著視頻課程學習效果更佳。 材料來源&#xff1a;【Shusenwang】的視頻課程【RNN模型及NLP應用…