貪心 洛谷 刪數問題

2021-10-05 04:35:31 字數 1014 閱讀 2366

題目描述

鍵盤輸入乙個高精度的正整數n(不超過250位) ,去掉其中任意k個數字後剩下的數字按原左右次序將組成乙個新的正整數。程式設計對給定的n和k,尋找一種方案使得剩下的數字組成的新數最小。

輸入格式

n (高精度的正整數)

k(需要刪除的數字個數)

輸出格式

最後剩下的最小數。

輸入輸出樣例

輸入 #1 複製

175438

4輸出 #1 複製

13題解:

這題應該是乙個很明顯的貪心問題,同時考慮到給出的高精度數字,應該轉為字串處理

在確定上述問題後,很簡單就可以寫出**,但是這題為什麼能在洛谷上算為了接近提高難度的題呢?作者認為此題的難度不在於高精度和貪心,而是因為這個題目的特殊資料是比較多的,需要程式設計師對每乙個特殊情況都考慮到才能ac,下面我們來討論一下有哪些特殊情況的資料。

首先,對於諸如 n = 10000,k=1,這樣的一組資料,它的輸出應該是多少?可以確定應該是 0 才對。因為 10000 在刪除乙個數 1 後,它僅剩的應該是 0000 ,但是對於乙個數字來說,它應該是被寫作 0 才合適。

其次,對於諸如 n = 20001 ,k = 1 ,這樣的一組資料,它的輸出應該是多少?可以確定應該是 1 才對。因為 20001 在刪除乙個數 2 後,它僅剩的應該是 0001 ,但是對於乙個數字來說,它應該是被寫作 1 才合適。

所以從上面兩個特例資料就發現,對這個資料的處理不僅僅是開始對高精度的處理方法與過程中的貪心演算法,在輸出資料的時候也要對資料的前導進行判斷與處理,這樣,乙個可以ac的**就出來了!於是,下面就是作者幾經修改得到的可ac的**:

#include

#include

#include

using namespace std;

int main()

} n--;

}i=0;

while(ii++;

if(n==i) cout<<"0";

else

for(;icout

刪數問題(貪心)

time limit 1000ms memory limit 65536k 有疑問?點這裡 給定n 位 n 100 正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新的正整數。對於給定的n 位正整數a和正整數k,設計乙個演算法找出剩下數字組成的新數最小的刪數方案。對於給定的正整...

貪心 刪數問題

題目描述 鍵盤輸入乙個高精度的正整數n 240位 去掉其中任意s個數字後剩下的數字按原左右次序將組成乙個新的正整數。程式設計對給定的n和s,尋找一種方案,使得剩下的數字組成的新數最小。n s 最後剩下的最小數 樣例輸入 178543 4樣例輸出13 這題貪心是要找乙個單調增的數,即保證較小數總在高位...

貪心 刪數問題

problem description 鍵盤輸入乙個高精度的正整數n 100位 去掉其中任意s個數字後剩下的數字按照原來的左右次序組成乙個新的正整數。程式設計對給定的n與s,尋找一種方案,使得剩下的數字組成的新數最小。input 輸入有多組 每組包括原始數n,要去掉的數字數s output 輸出去掉...