OJ3RD 1181 刪數問題 貪心演算法

2021-07-09 03:08:52 字數 668 閱讀 3018

之前怎麼也搞不明白錯在哪了,結果發現居然是乙個條件打錯了.......  淚崩t^t

給定n位數要求刪除s個數,問最大的結果,要求首位不能為0.

貪心法則:因為高位更重要所以從左往右找,

第一位比較特殊,因為不能是零,往後找s個數求其中不為0的最小值,如果比第一位還要小就刪到讓那個最小值代替第一位;

只要s不為零就往後找,判斷類似第一位,只是後面的位允許最小值為0

兩個特例:找到最後一位s仍舊不為0,那麼就把最後s位刪除

s==n-1   也就是刪完後變成個位數..  題目裡沒說可否為0,我的理解是可以,那麼直接找全數字的最小值

#include#include#includeusing namespace std;

int n, s;

int main()

else

if (min < str[0] - 48)

}for (int i = 1; i <= str.length() - 2; i++)

if (min < str[i] - 48)}}

}if (s > 0)

str.erase(str.length() - s, s);

cout << str << endl;}}

return 0;

}

刪數問題 oj

time limit 1000 ms memory limit 65536 kib submit statistic problem description 鍵盤輸入乙個高精度的正整數n 100位 去掉其中任意s個數字後剩下的數字按照原來的左右次序組成乙個新的正整數。程式設計對給定的n與s,尋找一種...

刪數問題(貪心)

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 這題貪心是要找乙個單調增的數,即保證較小數總在高位...