1. 程式人生 > >jzoj P4310 最優交換___列舉+貪心

jzoj P4310 最優交換___列舉+貪心

題目大意:

這裡寫圖片描述
這裡寫圖片描述

題解:

這題我們發現是一個很顯然的貪心:
從首位開始向後搞,每次將後面能挪過來的最大的挪過來即可
注意下挪過來的過程中,挪的那個數是放在這一位的前面,其他是不變的,
一開始我把i和要變換過來的第j位對調了....

時間複雜度:O(TN^2)

程式碼:

var
     rp,i,j,k,l,t:longint;
     s:string;
     w:char;
begin
     assign(input,'swap.in'); reset(input);
     assign(output,'swap.out'); rewrite(output);
     readln(t);
     for
rp:=1 to t do begin read(w); s:=''; while w<>' ' do begin s:=s+w; read(w); end; read(k); for i:=1 to length(s)-1 do begin w:=s[i]; j:=0
; l:=0; while (j<k) and (i+j+1<=length(s)) do begin inc(j); if s[i+j]>w then begin w:=s[i+j]; l:=j; end
; end; if l<>0 then begin delete(s,i+l,1); insert(w,s,i); k:=k-l; end; end; readln; writeln(s); end; close(input); close(output); end.