貪心算法經典問題

目錄

貪心思想

一、Dijkstra最短路問題

問題描述:

貪心策略:

二、Prim 和 Kruskal 最小生成樹問題

Prim 算法:

Kruskal 算法:

三、Huffman樹問題

問題描述:

貪心策略:

四、背包問題

問題描述:

貪心策略:

五、硬幣找零問題

問題描述:

貪心策略:

六、區間合并問題

問題描述:

貪心策略:

七、選擇不相交區間問題

問題描述:

貪心策略:

八、區間選點問題

問題描述

貪心策略

九、區間覆蓋問題

問題描述:

貪心策略:

十、區間分組問題

問題描述:

貪心策略:

十一、任務調度問題

問題描述:

貪心策略:

十二、加油站問題

問題描述:

貪心策略:

十三、跳躍游戲

問題描述:

貪心策略:

十四、跳躍游戲 II

問題描述:

貪心策略:

?十五、股票買賣問題

問題描述:

貪心策略:

十六、最小代價貪心問題

問題描述:

貪心策略:

1.https://codeforces.com/contest/2118/problem/C

思路:

代碼:

2.https://codeforces.com/contest/1722/problem/D

思路:

代碼:

十七、其他

1.B-黃_牛客小白月賽118

思路:

代碼:

2.https://codeforces.com/problemset/problem/2116/B

思路及代碼:cf2116B-CSDN博客

3.https://codeforces.com/problemset/problem/2067/B

思路及代碼:cf2067B-CSDN博客

4.https://codeforces.com/problemset/problem/2059/B

思路及代碼:cf2059B-CSDN博客

5.https://codeforces.com/contest/1760/problem/E

思路:

代碼:

6.https://codeforces.com/contest/2110/problem/C

?思路及代碼:cf2110C-CSDN博客


貪心思想

????????貪心算法(Greedy Algorithm)是一種在求解問題時,每一步都選擇當前最優解,以期望最終得到全局最優解的算法思想。貪心算法的基本思想可以總結為“每一步都做出一個局部最優的選擇,最終就能得到全局最優解”。

一、Dijkstra最短路問題

問題描述:

在一個圖中,找到從起點到其他所有點的最短路徑(適用于無負邊權的情況)。

貪心策略:

每次擴展離源點最近的未訪問節點。

二、Prim 和 Kruskal 最小生成樹問題

Prim 算法:

從任意一個頂點開始,逐步加入與當前樹連接權重最小的邊。

Kruskal 算法:

按邊權從小到大排序,依次加入不會形成環的邊。

三、Huffman樹問題

問題描述:

構造一個帶權路徑長度最小的二叉樹,用于數據壓縮中的最優前綴編碼。

貪心策略:

每次合并兩個頻率最小的節點。

四、背包問題

問題描述:

物品可以取部分,目標是在容量限制下最大化總價值。

貪心策略:

按單位重量價值從高到低依次選取。

五、硬幣找零問題

問題描述:

給定不同面值的硬幣,求最少數量湊出某個金額。

貪心策略:

優先使用最大面值的硬幣。

六、區間合并問題

問題描述:

給定多個區間,合并所有有重疊或相鄰的區間,返回合并后的無重疊區間列表。

貪心策略:

按左端點排序后依次處理,若當前區間與結果中最后一個區間重疊,則合并。

七、選擇不相交區間問題

問題描述:

給定多個時間區間,從中選擇盡可能多的互不重疊的區間。

貪心策略:

按右端點從小到大排序,每次選擇最早結束的區間,跳過與其沖突的區間。

八、區間選點問題

問題描述

在每個區間中至少選一個點,使得這些點覆蓋所有區間,要求所選點的數量最少。

貪心策略

按右端點排序,每次在當前未被覆蓋的區間的右端點上選一個點。

九、區間覆蓋問題

問題描述:

給定一個目標區間和若干子區間,判斷是否能用這些子區間完全覆蓋目標區間。

貪心策略:

按左端點排序,從起點開始,每次選擇能延伸最遠的區間,逐步擴展覆蓋范圍。

十、區間分組問題

問題描述:

將一組區間分成若干個組,每組內的區間互不重疊,要求使用的組數最少。

貪心策略:

按左端點排序,使用最小堆維護各組的最早可用時間,優先將當前區間分配給最早空閑的組。

十一、任務調度問題

問題描述:

給定若干任務及其完成期限和利潤,選擇能獲得最大利潤的任務序列。

貪心策略:

按利潤降序排序,依次嘗試安排任務在最后可行的時間點。

十二、加油站問題

問題描述:

一輛車繞一圈油路,判斷是否可以從某一點出發完成一圈,并找出該起點。

貪心策略:

維護當前油量和總油量,若當前油量為負則重新設置起點。

十三、跳躍游戲

問題描述:

數組中每個元素代表可跳躍的最大步數,判斷是否可以到達最后一個位置。

貪心策略:

維護當前能跳到的最遠位置,逐步推進。

十四、跳躍游戲 II

問題描述:

在跳躍游戲中,求最少跳躍次數到達終點。

貪心策略:

維護當前能跳的最遠邊界,以及下一步的最遠可達。

?十五、股票買賣問題

問題描述:

允許多次買賣,但每次只能持有一股。

貪心策略:

只要第二天價格比今天高,就買入賣出。

十六、最小代價貪心問題

問題描述:

在有限操作次數內,通過優先選擇代價最低的操作使目標值最大化。

貪心策略:

按操作代價從小到大依次選擇操作,直到操作次數用盡。

1.https://codeforces.com/contest/2118/problem/C

思路:

? ? ? ? 統計每個數字每一位變1的代價,排序取最小的 n 個即可。

代碼:
void solve()
{ll n, k;cin >> n >> k;vector<ll> a(n + 10);cin >> a;vector<ll> v;ll ans = 0;for (ll i = 0; i < n; ++i){ll x = a[i];ll cnt = 0;for (ll j = 0; j < 63; ++j){if (x >> j & 1ll)ans++;elsev.pb(1ll << j);}}sort(all(v));for (auto x : v){if (k <= 0)break;if (k >= x){ans++;k -= x;}}cout << ans << endl;
}

2.https://codeforces.com/contest/1722/problem/D

思路:

? ? ? ? 統計每個字符最大貢獻與當前貢獻的差值,排序即可。

代碼:
void solve()
{int n;string s;cin >> n >> s;s = ' ' + s;ll ans = 0;vector<int> maxx(n + 10, 0);for (int i = 1; i <= n; ++i){if (s[i] == 'L'){maxx[i] = {abs(max(i - 1, (n - i)) - (i - 1))};ans += i - 1;}else{maxx[i] = {abs(max(i - 1, (n - i)) - (n - i))};ans += n - i;}}sort(maxx.begin() + 1, maxx.begin() + 1 + n, greater<int>());for (int i = 1; i <= n; ++i){ans += maxx[i];cout << ans << ' ';}cout << endl;
}

十七、其他

這類題目不是經典的貪心模型,但是解題思路是基于貪心策略的題目。

1.B-黃_牛客小白月賽118

思路:

? ? ? ? 每次配對 a[i] 和 a[i + 1],如果不互質,就將 a[i + 1] 變為 1,因為 a[i] 在之前可能與其他的元素配對了,選擇修改 a[i + 1] 是更優的。

代碼:
void solve()
{int n;cin >> n;vector<ll> a(n + 10);for (int i = 0; i < n; ++i)cin >> a[i];ll ans = 0;for (int i = 0; i < n - 1; ++i){if (__gcd(a[i], a[i + 1]) != 1){a[i + 1] = 1;++ans;}}cout << ans << endl;
}

2.https://codeforces.com/problemset/problem/2116/B

思路及代碼:cf2116B-CSDN博客

3.https://codeforces.com/problemset/problem/2067/B

思路及代碼:cf2067B-CSDN博客

4.https://codeforces.com/problemset/problem/2059/B

思路及代碼:cf2059B-CSDN博客

5.https://codeforces.com/contest/1760/problem/E

思路:

? ? ? ? 題目要求統計i<j?且?a_i>a_j?的索引對數,由于只有 0、1 兩種元素,所以只需統計 1 后面有幾個 0 即可;我們還可以將 1 個元素取反,不難發現將第一個值為 0 的元素變 1 或最后一個值為1 的元素變 0 貢獻最大,可證明該貪心策略成立,由于數據量不大,直接把三種情況都統計一遍即可(不變的也要統計)。

代碼:
void solve()
{int n;cin >> n;vi a(n + 10), b;cin >> a;vi cnt1(n + 10, 0);int cur = 0;for (int i = n - 1; ~i; --i)if (a[i] == 0)++cur;elsecnt1[i] = cur;b = a;for (int i = 0; i < n; ++i)if (b[i] == 0){b[i] = 1;break;}vi cnt2(n + 10, 0);cur = 0;for (int i = n - 1; ~i; --i)if (b[i] == 0)++cur;elsecnt2[i] = cur;b = a;for (int i = n - 1; ~i; --i)if (b[i] == 1){b[i] = 0;break;}vi cnt3(n + 10, 0);cur = 0;for (int i = n - 1; ~i; --i)if (b[i] == 0)++cur;elsecnt3[i] = cur;ll ans1 = 0, ans2 = 0, ans3 = 0;for (int i = 0; i < n; ++i)ans1 += cnt1[i];for (int i = 0; i < n; ++i)ans2 += cnt2[i];for (int i = 0; i < n; ++i)ans3 += cnt3[i];cout << max({ans1, ans2, ans3}) << endl;
}

6.https://codeforces.com/contest/2110/problem/C

?思路及代碼:cf2110C-CSDN博客

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

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

相關文章

零知開源——STM32F4實現ILI9486顯示屏UI界面系列教程(一):電子書閱讀器功能

本教程將詳細介紹如何在零知增強板上使用3.5寸ILI9486顯示屏實現電子書閱讀器功能。我們將使用LVGL庫構建用戶界面&#xff0c;并實現翻頁、進度顯示等核心功能。 目錄 一、硬件連接 二、軟件UI組件實現 三、零知IDE配置 四、演示效果 五、常見問題解決 六、總結與擴展 一…

支持selenium的chrome driver更新到137.0.7151.119

最近chrome釋放新版本&#xff1a;137.0.7151.119 如果運行selenium自動化測試出現以下問題&#xff0c;是需要升級chromedriver才可以解決的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only s…

架構下的最終瓶頸:數據庫如何破局?

在分布式系統和云原生架構逐漸成熟的當下&#xff0c;我們已能夠靈活擴展計算資源、水平擴展服務節點、拆分業務模塊等。然而&#xff0c;在經歷過多輪架構優化之后&#xff0c;數據庫常常成為系統的“最后瓶頸”。尤其當數據量、并發量、實時性要求劇增時&#xff0c;數據庫即…

湖北理元理律師事務所小微企業債務重組方案:司法與經營的共生邏輯

小微企業債務問題常陷入“救企業還是保老板”的困局。湖北理元理律師事務所為某汽車零部件供應商設計的“經營性債務重組”方案&#xff0c;提供了創新解題思路。 核心矛盾拆解 該企業面臨三重困境&#xff1a; 矛盾類型 具體表現 法律風險等級 擔保鏈危機 老板個人擔保牽…

FastAdmin退出登錄不提示的修改方法

修改退出登錄后的提示行為 在FastAdmin中&#xff0c;默認退出登錄后會顯示"退出成功"的提示信息并跳轉頁面。要實現不顯示提示信息直接跳轉&#xff0c;可以通過以下方式修改&#xff1a; 方法一&#xff1a;修改控制器邏輯 找到application/admin/controller/Log…

工信部發布《中國工業軟件產業發展研究報告(2025)》:PLM壟斷加劇,Ai為國產PLM軟件發展契機

在6月17日上午舉行的2025南京軟件大會開幕式上&#xff0c;工信部電子第五研究所現場發布《中國工業軟件產業發展研究報告&#xff08;2025&#xff09;》&#xff08;以下簡稱《研究報告》&#xff09;&#xff0c;并從工業軟件產業發展現狀、產業發展趨勢&#xff0c;以及我國…

Flutter JSON解析全攻略:使用json_serializable實現高效序列化

引言&#xff1a;為什么我們需要JSON序列化工具&#xff1f; 在現代移動應用開發中&#xff0c;與服務器進行數據交互是必不可少的功能。JSON&#xff08;JavaScript Object Notation&#xff09;作為一種輕量級的數據交換格式&#xff0c;因其易讀性、簡潔性和廣泛支持性&…

shelve模塊的使用

shelve模塊的使用 1. 什么是Shelve2. Shelve模塊的數據存儲與讀取3. Shelve的讀取數據4. Shelve模塊的高級操作_ Shelve的數據更新和刪除5. 刪除操作可以使用del語句&#xff1a;6. Shelve的數據查詢和處理_使用for循環來遍歷Shelve對象中的所有鍵值對&#xff1a;7. Shelve模塊…

python大學校園舊物捐贈系統

目錄 技術棧介紹具體實現截圖系統設計研究方法&#xff1a;設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理&#xff0c;難度適中&#xf…

Python爬蟲實戰:研究eventlet庫相關技術

1. 引言 在當今信息爆炸的時代,網絡上的數據量呈現出指數級增長的趨勢。從海量的網絡信息中獲取有價值的數據并進行分析,對于企業決策、學術研究以及個人興趣等方面都具有重要意義。網絡爬蟲作為一種自動化獲取網頁內容的技術手段,應運而生并得到了廣泛的應用。 網絡爬蟲(…

文字識別接口-智能文本處理-文字提取技術

文字識別接口&#xff0c;顧名思義&#xff0c;就是一種將圖像文字或手寫文字轉換為可編輯文本的技術。文字識別接口&#xff0c;基于深度學習算法與自主ocr核心實現多種場景字符的高精度識別與結構化信息提取&#xff0c;現已被廣泛應用于銀行、醫療、財會、教育等多個領域。 …

Redis的持久化機制詳細解析

Redis的持久化機制詳細解析 今天我們來聊聊Redis的持久化機制。想象一下&#xff0c;你正在玩一個非常精彩的游戲&#xff0c;突然斷電了&#xff0c;如果沒有存檔功能&#xff0c;所有的進度都會丟失&#xff0c;是不是很崩潰&#xff1f; Redis作為內存數據庫&#xff0c;同…

2025年SYN-CC混合攻擊防御實戰:某金融平臺抵御800Gbps雙重風暴實錄

“你以為防住SYN Flood就能高枕無憂&#xff1f;新型SYN-CC混合鏈正在撕裂傳統防御體系&#xff01;” 一、事件現場&#xff1a;一場精準的“協議層絞殺” 2025年5月&#xff0c;某跨境支付平臺遭遇史上首次SYN-CC混合攻擊&#xff0c;峰值流量達 800Gbps&#xff0c;核心交易…

JSON 編輯器:從語法到數據處理(二)

JSON 編輯器&#xff1a;從語法編寫到結構可視化&#xff08;一&#xff09;-CSDN博客 在上一篇中&#xff0c;我們了解了 JSON 的語法和編輯器&#xff0c;解決了 “怎么寫對 JSON” 的問題。 而實際開發中&#xff0c;更關鍵的是 “怎么高效處理 JSON 數據” —— 如何從商品…

按鍵開關的結構、功能與環保安全?

工業控制的核心觸手&#xff1a;深度解析按鍵開關的結構、功能與環保安全 一、 結構基石&#xff1a;雙觸點轉換機制 按鍵開關的核心在于其精妙的觸點系統。絕大多數按鍵開關都配備有兩對獨立的觸點&#xff0c;這是實現復雜控制邏輯的基礎。每一對觸點并非隨意組合&#xff…

BigDetection:改進目標檢測器預訓練的大規模基準之論文閱讀

摘要 近年來,多個數據集和開放挑戰已被引入用于目標檢測研究。為了構建更通用且強大 的目標檢測系統,本文提出了一個新的大規模基準數據集,稱為 BigDetection。我們的目標是 整合現有數據集(LVIS、OpenImages 和 Object365)的訓練數據,并遵循精心設計的原則,構建一個更…

Linux系統移植⑨:uboot啟動流程詳解-bootz啟動Linux過程

Linux系統移植⑨&#xff1a;uboot啟動流程詳解-bootz啟動Linux過程 bootz 是 U-Boot 中用于啟動 Linux 內核的命令&#xff0c;專為處理 zImage&#xff08;壓縮內核映像&#xff09; 設計。 啟動 Linux 的完整過程&#xff1a; 1. 加載內核與相關文件 U-Boot 先將以下文件…

【R】基于R實現貝葉斯分析(一)

文章目錄 貝葉斯簡介Why R理論基礎一、三種先驗分布和對應后驗的計算1. 離散先驗2.Beta先驗&#xff08;共軛先驗&#xff09;3. 直方圖先驗 二. 后驗抽樣1. 網格點采樣法2. 其他方法 三、貝葉斯推斷1. 參數估計(1) 后驗均值(2) 后驗方差(3) 后驗區間 2. 假設檢驗3. 預測(1) 先…

論文略讀:Personality Alignment of Large Language Models

ICLR 2025 558 當前的大語言模型&#xff08;LLMs&#xff09;在對齊時&#xff0c;通常旨在反映普遍的人類價值觀與行為模式&#xff0c;但卻常常無法捕捉到個體用戶的獨特特征與偏好。 為填補這一空白&#xff0c;本文提出了**“人格對齊&#xff08;Personality Alignment&…

JSON與XML怎么選?什么情況下會用到 JSON?

一、JSON 與 XML 的核心區別 從 語法、性能、適用場景 等維度對比&#xff0c;核心差異如下&#xff1a; 對比維度JSONXML語法結構鍵值對格式&#xff08;如 {"name": "無線耳機"}&#xff09;&#xff0c;無標簽&#xff0c;結構緊湊。標簽嵌套格式&…