NYOJ448 尋找最大數(貪心)

2021-08-14 22:42:35 字數 969 閱讀 8255

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:2 描述

請在整數 n 中刪除m個數字, 使得餘下的數字按原次序組成的新數最大,

比如當n=92081346718538,m=10時,則新的最大數是9888

輸入

第一行輸入乙個正整數t,表示有t組測試資料

每組測試資料佔一行,每行有兩個數n,m(n可能是乙個很大的整數,但其位數不超過100位,並且保證資料首位非0,m小於整數n的位數)

輸出每組測試資料的輸出佔一行,輸出剩餘的數字按原次序組成的最大新數

樣例輸入

2

92081346718538 10

1008908 5

樣例輸出

9888

98

【分析】貪心

經典刪數問題。 為保證最終得到的數最大,進行以下操作:

(1)刪除:對輸入數字進行掃瞄時,若找到相鄰兩位(記為ab)是嚴格單調遞增的,則刪除a保留b;若當前數各數字嚴格單調不增,則刪除最後一位。以保證刪除對輸入數字的"損失"最小;

(2)字首0處理:若刪除數字完成後的數字前面有字首0,輸出時不應輸出,因此需要找到第乙個非0數字,從該位開始輸出。特別地,如果整個數各位均為0,則輸出"0"。

#include #include #define maxlen 105

int t,m;

char n[maxlen];

int main()

{ int i,j,len;

int is_del; //記錄每輪掃瞄是否找到嚴格單調遞增的子串行"ab"

scanf("%d",&t);

while(t--)

{ scanf("%s %d",n,&m);

len=strlen(n);

while(m>0)

{ for(i=0;i

貪心 NYOJ448 尋找最大數

時間限制 1000 ms 記憶體限制 65535kb 難度 2 描述 請在整數 n 中刪除 m個數字 使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538 m 10 時,則新的最大數是 9888 輸入 第一行輸入乙個正整數 t,表示有 t組測試資料 每組測試資料佔一行,每行有...

nyoj448尋找最大數

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行有兩個數n...

NYOJ 448 尋找最大數

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行有兩個數n...