乙個車牌號由n位數字組成。如果乙個車牌至少有k位數字是相同的,那麼我們就說這個車牌漂亮的車牌。現在華沙想要改變他自己的車牌,使得他的車牌變得漂亮。當然,改車牌是要花錢的。每改變一位數字所要花費的費用等於當前位上的新舊數字之差的絕對值。那麼總費用就是每位上所花費用的總和。
舉例如下,
舊牌為0123,新牌為7765,那麼對應第一位所花費用為|0-7|=7,第二位為|1-7|=6,第三位為|2-6|=4,第四位為|3-5|=2,總和為7+6+4+2=19
華沙想用最少的錢,使他的車牌變得漂亮起來。現在給定n,k,和舊牌的號碼,計算換牌的最少費,以及新牌的號碼,
如果最少費用的號碼有多個,我們取字典序最小的那個。
樣例解釋:
在樣例中,把第二個數字換成「8」花費|9-8|=1,把第五個數字換成「8」也花了1。
把第六個數字換成「8」花費|6-8|=2.總費用為1+1+2=4,新號碼為「888188」
兩個長度為n的序列比較方法如下。
存在兩個序列x,y,長度都是n。
如果存在i(1≤i≤n)和任意j(1≤j<i)使得 xi<yi
並且 xj=yj
,那麼我們就說x比y小。
input
單組測試資料output第一行,兩個由空格隔開的數字n和k(2≤n≤10^4,2≤k≤n),表示舊牌的位數,和至少要有k位數字相同才能構成漂亮的車牌。
第二行有n位數字,代表華沙的舊車牌。(舊車牌中只有數字)。
共兩行,input示例第一行,乙個整數,代表換牌的最小費用,
第二行,n位數字,表示新的車牌。
如果最小費用的車牌有多個,輸出字典序最小的那個。
6 5output示例898196
4view code1 #include 2
using
namespace
std;
3 #include
4 #include
5 #include6 #include7 #include8 #include9 #include10 #include11 #include12 #include13 #include 14 #include 15 #include16 #include17
struct
lll18
s;22
intbiaozhun;
23struct
cmp2
44else
4551}52
}53};54 priority_queue,cmp2>tm[10
];55
char a[11000
];56
char goubi1[11000
];57
char goubi2[11000
];58
int b[15][11000
];59
intn,m;
60int gougougou[20
];61
int panduan(char s1,char
s2)62
70return0;
71}72int mp[20
];73
intmain()
7486
for(int i=0;i<=9;i++)
8796}97
int min1=1e8;
98int
sum;
99int
t;100
for(int i=9;i>=0;i--)
101109
if(gougougou[i]<=min1)
110114
115}
116 cout
117for(int i=0;i)
118122
for(int i=t+1;i<=9;i++)
123131
//cout<132
if(panduan(goubi1,goubi2)==0
)133
139}
140else
141146
}147
}148
}149 cout
150return0;
151 }
51nod1621 花錢買車牌
乙個車牌號由n位數字組成。如果乙個車牌至少有k位數字是相同的,那麼我們就說這個車牌漂亮的車牌。現在華沙想要改變他自己的車牌,使得他的車牌變得漂亮。當然,改車牌是要花錢的。每改變一位數字所要花費的費用等於當前位上的新舊數字之差的絕對值。那麼總費用就是每位上所花費用的總和。舉例如下,舊牌為0123,新牌...
51Nod1621 花錢買車牌
乙個車牌號由n位數字組成。如果乙個車牌至少有k位數字是相同的,那麼我們就說這個車牌漂亮的車牌。現在華沙想要改變他自己的車牌,使得他的車牌變得漂亮。當然,改車牌是要花錢的。每改變一位數字所要花費的費用等於當前位上的新舊數字之差的絕對值。那麼總費用就是每位上所花費用的總和。舉例如下,舊牌為0123,新牌...
51nod 1621花錢買車牌(貪心)
乙個車牌號由n位數字組成。如果乙個車牌至少有k位數字是相同的,那麼我們就說這個車牌漂亮的車牌。現在華沙想要改變他自己的車牌,使得他的車牌變得漂亮。當然,改車牌是要花錢的。每改變一位數字所要花費的費用等於當前位上的新舊數字之差的絕對值。那麼總費用就是每位上所花費用的總和。舉例如下,舊牌為0123,新牌...