貪心演算法及相關題目(一)

2021-07-29 22:38:31 字數 1857 閱讀 3098

一、貪心演算法概念

貪心演算法通過做出一系列選擇來求出問題的最優解,在每個決策點,它做出在當時看來最佳的選擇。由此可見,貪心演算法並不從整體最優考慮,它所作出的選擇只是在某種意義上的區域性最優選擇,但是對許多問題它都所得到的解都是全域性最優解。

二、相關題目

第一題:sicily 1198. substring

#include 

#include

using

namespace

std;

//重寫比較函式,用兩種方式連線兩字串,按得到的字串字典序較小的情況來排序

//如果不重寫比較函式,那麼就是直接按字典序比較 a,b 的大小

//但是這樣排序後將字串連線起來的不一定是最小字典序

//比如:b,ba; 按字典排序後再連線起來是 bba, 但正確應該是 bab

bool compare(string s1, string s2)

int main()

return

0;}

第二題:sicily 1681 matchsticks

#include 

#include

#include

#include

using

namespace

std;

//找用 n 根火柴能拼出的最大的數

string largest(int n)

//如果有奇數根火柴,則最高位數字為 7,其餘的均為 1

else

return str;

}int main()

}while(t--)

return

0;}

第三題:sicily 1620 scvs and minerals

#include 

using

namespace

std;

int main()

}cout

<< m << endl;

}return

0;}

第四題:sicily 2503 最長字串

#include 

#include

#include

#include

#include

using

namespace

std;

//counta, countb, maxa, maxb都不為0時,以較小的數為分隔

//要根據兩者之間數量的關係來確定第一小段的數量

int longest(int small, int large, int ms, int ml)

int main()

else

if(!counta && countb)

else

if(!countb && counta)

else

cout

<< 0

<< endl; //兩者數量都為 0時,直接輸出 0

}else

if(!maxa && maxb)

else

if(!maxb && maxa)

else

cout

<< 0

<< endl; //maxa,maxb都為 0,輸出為 0

return

0;}

貪心 02 貪心演算法題目解析

122.買賣 的最佳時機 ii 134.加油站 給定乙個陣列,它的第 i 個元素是一支給定 第 i 天的 設計乙個演算法來計算你所能獲取的最大利潤。你可以盡可能地完成更多的交易 多次買賣一支 注意 你不能同時參與多筆交易 你必須在再次購買前 掉之前的 示例 1 輸入 7,1,5,3,6,4 輸出 7...

貪心演算法 附貪心相關習題

定義 貪心演算法是一種求解最優解的方法。它是按照某種最優策略,將複雜問題層層分解成子問題 每次一般只有乙個 並求子問題的最優解得到整個問題的最優解。貪心演算法並不是從整體上考慮問題,它所做出的選擇只是在某種意義上的區域性最優解。在每個子問題的選擇中只選擇區域性最優解,從而達到全域性最優解的一種演算法...

貪心演算法之經典題目 訂票

題目 一票務辦公室為 會售票,某一固定數量的連號票 簡稱套票 購票訂單以該套票中最小的座位號作為標誌。由於不能滿足所有訂單,故而採用 若訂單完全滿足觀眾要求的票全價 若訂單中至少乙個座位與觀眾要求不同,則半價。現求怎樣處理訂單,才能使總收入最高。輸入為套票裡座位數量,訂單數以及每個訂單對應的座位號 ...