【信息學奧賽一本通 C++題解】1285:最大上升子序列和

信息學奧賽一本通(C++版)在線評測系統
基礎算法 第一節 動態規劃的基本模型
1285:最大上升子序列和


“最大上升子序列和”問題課堂講解

1. 理解題意

同學們,想象我們有一串數字,就像一串彩色的珠子,每個珠子上都標著一個數字,這就是題目里說的序列。比如有這樣一串數字:(1),(7),(3),(5),(9),(4),(8)。

現在我們要從這串數字里挑出一些數字,這些數字要滿足后面的數字比前面的數字大,這樣挑出來的數字組成的新序列就叫上升子序列。比如說從上面那串數字里挑出(1),(3),(5),(9),這就是一個上升子序列。

我們的任務是在所有能挑出來的上升子序列里,找到數字加起來和最大的那個上升子序列,然后把這個最大的和告訴大家。要注意哦,最長的上升子序列,它的數字和不一定是最大的。就像數字序列(100),(1),(2),(3),最長的上升子序列是(1),(2),(3),但是數字和最大的上升子序列是(100),因為(100)比(1 + 2 + 3)的和要大。

2. 解題思路

我們可以用一種像搭積木一樣的方法來解決這個問題,這種方法叫動態規劃。

我們先給每個數字都想象有一個“小背包”,這個“小背包”里裝著以這個數字結尾的最大上升子序列的和。一開始,每個數字自己就是一個長度為(1)的上升子序列,所以每個數字“小背包”里的和就是它自己的值。

然后呢,我們從第二個數字開始,一個一個地看。對于每個數字,我們回頭看看它前面的那些數字。要是前面有個數字比它小,那就說明可以把這個小的數字和當前數字連起來,形成一個新的上升子序列。我們就把前面那個小數字“小背包”里的和,加上當前數字,得到一個新的和。我們比較一下,是原來這個數字“小背包”里的和大,還是新得到的和大,把大的那個存到當前數字的“小背包”里。

最后,我們看看所有數字的“小背包”,找出里面最大的那個和,這個和就是我們要找的最大上升子序列的和啦。

3. 解題步驟

  1. 輸入數字序列:我們要先知道這串數字有多少個,也就是輸入序列的長度(N)。然后把這串數字里的每個數字都一個一個地記下來,存到一個數組里。
  2. 初始化“小背包”:讓每個數字的“小背包”(也就是存儲以該數字結尾的最大上升子序列和的數組)里都先裝上它自己的值,因為每個數字自己就是長度為(1)的上升子序列,和就是它本身。
  3. 更新“小背包”:從第二個數字開始,一個一個地看,對于每個數字,看看它前面比它小的數字,把前面小數字“小背包”里的和加上當前數字,和原來當前數字“小背包”里的和比較,把大的那個存到當前數字的“小背包”里。
  4. 找出最大和:看看所有數字的“小背包”,找出里面最大的那個和,這就是我們要的答案。

4. C++代碼實現

#include <iostream> // 包含輸入輸出流的頭文件,這樣我們就能從鍵盤輸入數字,把結果輸出到屏幕上啦
using namespace std; int main() {int n; // 定義一個變量 n,用來存數字序列里有多少個數字cin >> n; // 從鍵盤輸入數字的個數,存到 n 里int a[1005]; // 定義一個數組 a,用來存數字序列,最多能存 1005 個數字int dp[1005]; // 定義一個數組 dp,這就是我們說的“小背包”數組,用來存以每個數字結尾的最大上升子序列的和// 輸入數字序列,并初始化“小背包”for (int i = 1; i <= n; i++) {cin >> a[i]; // 從鍵盤輸入一個數字,存到數組 a 的第 i 個位置dp[i] = a[i]; // 把“小背包”數組 dp 的第 i 個位置初始化為當前數字 a[i]}// 更新“小背包”for (int i = 2; i <= n; i++) { // 從第二個數字開始看for (int j = 1; j < i; j++) { // 看看當前數字前面的所有數字if (a[j] < a[i]) { // 如果前面的數字 a[j] 比當前數字 a[i] 小// 比較 dp[i] 和 dp[j] + a[i] 的大小,把大的那個存到 dp[i] 里dp[i] = max(dp[i], dp[j] + a[i]);  }}}int ans = 0; // 定義一個變量 ans,用來存最大上升子序列的和,先初始化為 0// 找出“小背包”數組里的最大值for (int i = 1; i <= n; i++) {ans = max(ans, dp[i]); // 比較 ans 和 dp[i] 的大小,把大的那個存到 ans 里}cout << ans << endl; // 把最大上升子序列的和輸出到屏幕上return 0;
}

5. 知識點總結

  1. 數組:我們用了兩個數組,(a)數組存原始的數字序列,(dp)數組存每個數字對應的“小背包”里的和。數組就像一個小抽屜,我們可以把很多東西(這里是數字)一個一個地放進去,還能按照順序找到它們。
  2. 循環:循環就像一個勤勞的小工人,會按照我們的要求重復做一些事情。這里用了兩層循環,外層循環一個一個地看數字,內層循環回頭看前面的數字,這樣就能更新每個數字的“小背包”啦。
  3. 動態規劃:這是一種很厲害的解題方法,把大問題分成很多小問題,先解決小問題,再從這些小問題的答案里找到大問題的答案。在這個問題里,我們先算出每個數字對應的最大上升子序列的和,再從這些和里找出最大的,就是整個序列的最大上升子序列的和啦。
  4. 比較大小:用(max)函數來比較兩個數的大小,找出大的那個數。這樣就能更新“小背包”里的和以及最終的最大和答案啦。

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

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

相關文章

刷題記錄Day4(補)

24. 兩兩交換鏈表中的節點 ① 使用虛擬節點 ② 最后返回頭結點的時候&#xff0c;head 本來的頭節點已經和第二位交換了&#xff0c;需要重新賦值 ③ 使用臨時指針保存變量 ④ 如果是空的不用特殊判斷&#xff0c;空的返回頭節點也還是空的 class Solution { public:ListNo…

花西子攜手賽博威共創新品創新平臺,驅動“新質美力”高質量發展

國貨彩妝品牌花西子與賽博威信息科技達成【新品創新平臺】項目合作&#xff0c;共探“新質美力”的高質量發展路徑。 近日&#xff0c;賽博威信息科技CEO陳國平攜團隊走進花西子“百年之詩”館&#xff0c;深入了解花西子的品牌理念、企業文化及百年愿景&#xff0c;并與花西子…

[JVM篇]垃圾回收器

垃圾回收器 Serial Seral Old PartNew CMS(Concurrent Mark Sweep) Parallel Scavenge Parallel Old G1 ZGC

在VScode內接入deepseek(本地部署版包會)

目錄 1. 首先得有vscode軟件 2. 在我們的電腦本地已經部署了ollama&#xff0c;我將以qwen作為實驗例子 3. 在vscode上的擴展商店下載continue 4. 下載完成后&#xff0c;依次點擊添加模型 5. 在這里可以添加&#xff0c;各種各樣的模型&#xff0c;選擇我們的ollama 6. 選…

[題解]2024CCPC重慶站-小 C 的神秘圖形

Sources&#xff1a;K - 小 C 的神秘圖形Abstract&#xff1a;給定正整數 n ( 1 ≤ n ≤ 1 0 5 ) n(1\le n\le 10^5) n(1≤n≤105)&#xff0c;三進制字符串 n 1 , n 2 ( ∣ n 1 ∣ ∣ n 2 ∣ n ) n_1,n_2(|n_1||n_2|n) n1?,n2?(∣n1?∣∣n2?∣n)&#xff0c;按如下方法…

AI外呼機器人:營銷新利器還是騷擾電話的升級版?

"您好&#xff0c;這里是XX房產&#xff0c;最近有購房需求嗎&#xff1f;""您好&#xff0c;您最近有種牙需求嗎&#xff1f;" 相信很多人都接到過類似的營銷電話&#xff0c;而電話那頭&#xff0c;很可能已經不是真人&#xff0c;而是AI外呼機器人。 近…

應對DeepSeek總是服務器繁忙的解決方法

最近由于訪問量過大&#xff0c;DeepSeek服務器官網經常彈出&#xff1a;“服務器繁忙&#xff0c;請稍后再試”的提示&#xff0c;直接卡成PPT怎么辦&#xff1f;服務器繁忙直接看到視覺疲勞&#xff1a; 解決DeepSeek卡頓問題 DeepSeek使用卡頓問題&#xff0c;是因為訪問量…

游戲引擎學習第107天

倉庫:https://gitee.com/mrxiao_com/2d_game_2 回顧我們之前停留的位置 在這段內容中&#xff0c;討論了如何處理游戲中的三維效果&#xff0c;特別是如何處理額外的“Z層”。由于游戲中的藝術資源是位圖而不是3D模型&#xff0c;因此實現三維效果變得非常具有挑戰性。雖然可…

Spring Boot最新技術特性深度解析與實戰應用

一、反應式編程:WebFlux與非阻塞架構 1.1 核心價值與場景 Spring Boot 2.x全面擁抱反應式編程模型,通過Spring WebFlux支持異步非阻塞的請求處理,適用于高并發、低延遲的微服務場景(如實時通信、物聯網數據處理)。其基于Reactor庫實現,采用事件循環模型,顯著提升資源利…

2. 圖片性能優化

圖片性能優化 圖片懶加載 如何判斷圖片出現在了當前視口 &#xff08;即如何判斷我們能夠看到圖片&#xff09;如何控制圖片的加載 原生實現 <img src"shanyue.jpg" loading"lazy" />loading"lazy" 延遲加載圖像&#xff0c;直到它和視…

sql盲注腳本

在sqli-labs中的第8題無回顯可以嘗試盲注的手法獲取數據 發現頁面加載了3秒左右可以進行盲注 布爾盲注數據庫名 import requestsdef inject_database(url):datanamefor i in range(1,15):low 32high 128mid (low high) // 2while low < high:path "id1 and asci…

文字識別產品、文檔識別系統、表格識別API

文字識別技術讓文字錄入工作不再繁瑣。人工智能時代&#xff0c;文字識別接口產品運用先進的光學字符識別與圖像處理技術&#xff0c;衍生了一系列圖像文字快速提取的應用場景。無論是掃描文件、照片文字還是PDF文檔&#xff0c;文字識別接口都能輕松應對。支持對中文簡體、中文…

Python 依賴管理的革新——Poetry 深度解析

引言 在 Python 生態中&#xff0c;依賴管理一直是開發者關注的重要話題。從最初的 pip 和 virtualenv&#xff0c;到后來的 pipenv&#xff0c;Python 依賴管理工具不斷進化。而近年來&#xff0c;Poetry 作為一款集成包管理和虛擬環境管理的新興工具&#xff0c;逐漸獲得了廣…

springcloud集成gateway

本篇文章只介紹gateway模塊的搭建步驟&#xff0c;并無gateway詳細介紹 gateway詳解請查看&#xff1a;SpringCloudGateway官方文檔詳解 前置處理 父模塊中已指定版本 不知道如何選擇版本看這篇&#xff1a; 手把手教你梳理springcloud與springboot與springcloudalibaba的版本…

【Elasticsearch】文本分析Text analysis概述

文本分析概述 文本分析使 Elasticsearch 能夠執行全文搜索&#xff0c;搜索結果會返回所有相關的結果&#xff0c;而不僅僅是完全匹配的結果。 如果你搜索“Quick fox jumps”&#xff0c;你可能希望找到包含“A quick brown fox jumps over the lazy dog”的文檔&#xff0c…

建筑兔零基礎自學python記錄22|實戰人臉識別項目——視頻人臉識別(下)11

這次我們繼續解讀代碼&#xff0c;我們主要來看下面兩個部分&#xff1b; 至于人臉識別成功的要點我們在最后總結~ 具體代碼學習&#xff1a; #定義人臉名稱 def name():#預學習照片存放位置path M:/python/workspace/PythonProject/face/imagePaths[os.path.join(path,f) f…

二〇二四年終總結

寫在前面 簡單總結一下告訴自己&#xff0c;曾經活著 不必太糾結于當下&#xff0c;也不必太憂慮未來&#xff0c;當你經歷過一些事情的時候&#xff0c;眼前的風景已經和從前不一樣了。——村上春樹 原本應該 24 年年中的時候寫 23 年年終的總結&#xff0c;但是一直拖著&…

LabVIEW太陽能制冷監控系統

在全球能源需求日益增長的背景下&#xff0c;太陽能作為一種無限再生能源&#xff0c;被廣泛應用于各種能源系統中。本基于LabVIEW軟件和STM32F105控制器的太陽能制冷監控系統的設計與實現&#xff0c;提供一個高效、經濟的太陽能利用方案&#xff0c;以應對能源消耗的挑戰。 項…

Node.js中的npm包:從入門到實踐指南

目錄 一、npm的核心概念 二、npm核心命令與工作流 三、package.json深度解析 四、高級技巧與最佳實踐 五、常見問題解決方案 六、未來趨勢 在Node.js生態中&#xff0c;npm&#xff08;Node Package Manager&#xff09; 是開發者不可或缺的工具。它不僅是全球最大的開源軟…

AIGC圖生視頻保姆級教程

一、AI文生圖高階技巧 推薦工具 ? MidJourney&#xff08;藝術感最強&#xff09; ? DALLE 3&#xff08;與ChatGPT深度聯動&#xff09; ? Leonardo.ai&#xff08;精細化參數控制&#xff09; 核心策略 提示詞架構&#xff1a; [主體描述][環境氛圍][鏡頭語言][風格參數…