演算法 (貪心演算法) 刪數問題

2021-08-13 18:25:11 字數 1232 閱讀 1154

刪數問題(需知道的數學定理)

給定n位正整數a,去掉其中任意k≤n 個數字後,剩下的數字按原次序排列組成乙個新 的正整數。對於給定的n位正整數a和正整數 k,設計乙個演算法找出剩下數字組成的新數最 小的刪數方案。

定理: ex:1 2 3 9 5;刪掉乙個數;

從第乙個數開始遍歷,到尋找到單調遞減的第乙個數(即單調遞增的最後乙個數),則刪除,若無單調遞減子串行,則刪掉最後乙個非遞減序列的數;每找到乙個就又從頭開始。即每做一次刪數,就是一次貪心選擇,刪掉此數剩下的數為組成最小,經過證明,此結論正確。

ex:1 2 3 9 5,刪掉三個數;

1:1 2 3 5

2:1 2 3

3:1 2

注意一種情況:3 0 0 2,刪去乙個數;

應該是2,而不是002

input

第 1 行是1 個正整數 a。第 2 行是正整數k。

output

輸出最小數

sample input

178543 

4

sample output

13

#include;

#include;

using namespace std;

int shanshu(char *a,int k) //沒找到那個單調遞減的第乙個數,就刪掉非遞減序列的最後乙個數。

else if (a[i] > a[i + 1])

n--;//長度減一

break;}}

k--;

} return n;

}int main()

system("pause");

return 0;

}

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

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

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

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

貪心演算法 刪數問題

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