Re: [問題]n位整數拿掉m數字得到最大數值

作者: stimim (qqaa)   2013-11-15 13:49:08
:: 我認為這題呢, 要用 increasing sequence 的觀念去看.
:: 從簡單的 case 出發:
:: 1-2-3-4, increasing sequence, so everytime we remove,
:: we start from begining.
:: 4-3-2-1, decreasing sequence, then we remove from back.
:: Thus, when we work on it,
:: we start from making the leading sequence as a decreasing sequence,
:: then remove the inflection point.
: 我反而不懂你這句的意思 QQ
Leon 的作法和我的應該是一樣的,
假如現在的字串是
a_0 a_1 a_2 ... a_n
而我們只打算刪掉一個數字,
那我們刪的一定是第一個 a_i , s.t. a_i < a_{i + 1}
如果不存在這樣的 i ,那我們就刪 a_n
如果我們要刪掉兩個數字,可能很容易的證明
a_0 ... a_n -> b_0 ... b_{n-1} -> c_0 ... c_{n - 2}
-> 代表做一次上面綠色字的操作。
這麼一來,c_0 ... c_{n-2} 會是最好的結果。
可以再推廣到刪掉 m 個數字的最好結果就是操作 m 次。
當然,下一次我們不用從 c_0 開始檢查,假如上一次被刪掉的是 b_i ,
那我們可以知道 b_0 >= b_1 >= b_2 >= ... >= b_{i - 1}, 且 b_j = c_j , j < i
所以下一次只要從 i - 1 開始檢查就好了
== PseudoCode ==
Given digis, m
stack := {}
for each digit in digits do
while m > 0 and stack != {} and stack.top < digit do
stack.pop
m := m - 1
end while
stack.push digit
end for
while m > 0 do
stack.pop
end while
answer := 0
exp := 1
while stack != {}
answer := answer + stack.top * exp
stack.pop
exp := exp * 10
end while
作者: jackace (inevitable......)   2012-01-19 18:32:00
2,1,9 刪兩個數字取最大 照你這樣做是不是會取到2阿看錯了 這樣是取到9沒錯

Links booklink

Contact Us: admin [ a t ] ucptt.com