給定n位正整數a,去掉其中任意k≤n 個數字後,剩下的數字按原次序排列組成乙個新的正整數。對於給定的n位正整數a和正整數 k,設計乙個演算法找出剩下數字組成的新數最小的刪數方案。如果數字最前面有0不輸出。
第 1 行是1 個正整數 a。第 2 行是正整數k。
輸出最小數。
在這裡給出一組輸入。例如:
178543
4
5001
1
123456
2
在這裡給出相應的輸出。例如:109
1
13
1
一、貪心策略1234
9
從給定的數字中,找到公升序的最後乙個數,也可以說是降序的首個數。
二、**實現
#include#include#include
//
strlen() 的標頭檔案
using
namespace
std;
intmain()
while(j<=len-1
) len--; //
總長度減1,因為刪除一次
}
//輸出:注意0xx這樣的輸出,需要去掉前面的0
intis=0; //
用於判斷首位是否為0,直到遍歷出現 非0 數 則置 1
for(int i=0;i)
} return0;
}
三、時間複雜度
刪除for迴圈中有兩個while迴圈,時間複雜度為o(n^3),輸出for迴圈時間複雜度為o(n),
所以整個過程的時間複雜度應該是為o(n^3)。(可能不對。。。或許)
四、心得
對於貪心策略,就是要盡量做到最貪心的思路,這是貪心策略的精髓,根據題目要求,確定要貪心的方向即可。
刪數問題(貪心)
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 輸出去掉...