貪心演算法初學 刪數問題

2021-06-20 12:03:49 字數 791 閱讀 7698

題目:

鍵盤輸入乙個高精度的正整數n(

<=240

位),去

掉任意s個數字後剩下的數字按原左右次序將組成一

個新的正整數。

程式設計對給定的n和s,尋找一種方案

,使得剩下的數最小。

****** input

178543 4

****** output

13

首先:n超過200位,肯定要用字串陣列來進行儲存。我們知道字串陣列隱含的'\0'作為結束符。當然,我們也可以用strlen()函式來直接計算字串長度。

第二步,如何刪除數字。假定只刪除乙個數字。每一步總是選擇乙個使剩下的數最小的數字刪除,即按高位到低位的順序搜尋,若各位數字遞增,則刪除最後乙個數字;否則刪除第乙個遞減區間的首字元,這樣刪一位便形成了乙個新的數字串。然後回到串首,按上述規則再刪除下乙個數字。這樣迴圈刪除s個數字即可完成。

還要注意一點的是,每刪除乙個數字,就要從這個陣列的第乙個單元開始重新判斷。所以,用當型迴圈比較合適。每判斷到乙個可以刪除的數,就結束判斷。

本題難度不大,但是要理解貪心演算法的本質:從問題的某乙個初始解出發,向給定的目標推進。推進的每一步做乙個當時看似最佳的貪心選擇。不斷的將問題規模縮小。並由所有的區域性最優選擇產生乙個全域性最優解。

#include#includeusing namespace std;

int main()

} i = 0;

while(n[i] == '0')

cout << n.substr(i, len) <

貪心演算法 刪數問題

刪數問題 給定乙個n位正整數a,刪掉其中任意k k n 個位,剩下的為按原順序形成乙個新的正整數。找出剩下的數字最小的刪樹方案。輸入 a 0,n位,0 輸出 最小的剩下的數。貪心策略 最近下降點優先。自左向右逐位掃瞄數字a,找到第i位,使得a i a i 1 那麼刪掉第i位後,剩下的是當前數字刪掉1...

python貪心演算法求刪數問題 貪心演算法 刪數問題

給定n位正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新 的正整數。對於給定的n位正整數a和正整數 k,設計乙個演算法找出剩下數字組成的新數最 小的刪數方案。輸入格式 第 1 行是1 個正整數 a。第 2 行是正整數k。輸出格式 輸出最小數。輸入樣例 在這裡給出一組輸入。例如...

python貪心演算法求刪數問題 貪心演算法 刪數問題

給定n位正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新的正整數。對於給定的n位正整數a 和正整數k,設計乙個演算法找出剩下數字組成的新數最小的刪數方案。演算法的原理應該是說從最高位開始,一次向低位搜尋,一旦遇到前一位 高位 的數大於當前位,則刪去前一位,直到刪除k個數,如果...