C 之 貪心演算法 刪數問題

2021-08-07 02:34:25 字數 1166 閱讀 9644

鍵盤輸入乙個高精度的正整數n(n<=240位),去掉其中任意s個數字後剩下的數字按照原來的次序將組成乙個新的正整數。程式設計對給定的n和s,尋求一種方案,使得剩下組成的新數最小。

178543

4

由於正整數n的有效位數最大可達240位,所以可以採用字串型別來儲存n。那麼,應如何來確定該刪除哪s位呢?是不是只要刪掉最大的s個數字就可以了呢?

為了盡可能地逼近目標,我們選取的貪心策略為:每一步總是選擇乙個使剩下的數最小的數字刪去,即按高位到低位的順序搜尋,若各位數字遞增,則刪除最後乙個數字,否則刪除第乙個遞減區間的首字元。然後回到串首,按上述規則再刪除下乙個數字。重複以上過程s次,剩下的數字串便是問題的解了。

狀態:ac

#include

using

namespace

std;

int s;

string n;

int main()

}bool f=false;

for(int i=0;i<=n.length()-1;i++)

printf("\n");

}

其實,面對後面的輸出,我們還可以用一種方法,如下:

#include

using

namespace

std;

int s;

string n;

int main()

}while(n[0]=='0'&&n[1])

for(int i=0;i<=n.length()-1;i++)

printf("%c",n[i]);

printf("\n");

}

重點提出:

while(n[0]=='0'&&n[1])

for(int i=0;i<=n.length()-1;i++)

printf("%c",n[i]);

printf("\n");

}

刪數問題 貪心演算法 C

題目描述 給定乙個高精度正整數a,去掉其中k個數字後按原左右次序將組成乙個新的正整數。對給定的a,k尋找一種方案,使得剩下的數字組成的新數最小。此題可用貪心演算法進行求解 具體思路 當k 1時,對於n位數構成的數刪除哪一位,使得剩下的資料最小。刪除滿足如下條件的a i 它是第乙個a i a i 1 ...

貪心演算法 刪數問題

刪數問題 給定乙個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。輸出格式 輸出最小數。輸入樣例 在這裡給出一組輸入。例如...