刪數問題 題解

2021-08-22 15:18:03 字數 563 閱讀 2145

本題使用貪心思想

乙個讓這串數字越小,它的高位數就得越小。我們每次刪除要使得刪除後的數高位盡量的小。

每一次刪除時,從最高位開始向低位數遍歷,當遇到的一位數比它的更高位更小時,我們就刪除它的更高一位,讓這個更小的數「篡位」,就可以保證這串數更小。下一次刪除時,要也從新從最高位開始

需要注意的地方

刪除了最高位之後,需要刪去後面的『0』

輸出的時候要注意有沒有全刪刪沒,全刪沒後要輸出0。

/*使用c++ 的 string*/

#include

#include

using

namespace

std;

int main()

i = 0;//想讓下一次迴圈i=1,可惜忘了每次迴圈還要加1,寫成了 i=1;o(╥﹏╥)o }}

//k沒用完?說明所以數都公升序。這時只需去除末尾的k位

for(; k>0; k--)

if(a.empty())else{

cout

《時空複雜度會略低

題解 刪數問題 Noip1994

時間限制 1000 ms 記憶體限制 65536 kb 提交數 11506 通過數 3852 輸入乙個高精度的正整數n,去掉其中任意s個數字後剩下的數字按原左右次序組成乙個新的正整數。程式設計對給定的n和s,尋找一種方案使得剩下的數字組成的新數最小。輸出新的正整數。n不超過240位 輸入資料均不需判...

P1106 刪數問題 詳細題解

戳一戳 題解 對於這題我們使用貪心思想 貪心策略是比較前乙個數是不是比後面一位數要大 因為要得到最小的數,就要盡量讓數的前面位數小 如果要大的話,就把當前的數給刪去 得到乙個新的string 然後再重新進行一次兩兩大小的判斷 每重新判斷一次 就會刪去乙個數 也就是總體要判斷k次 當然也會出現沒有前面...

刪數問題(貪心)

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