problem 2197 最小花費
給乙個長度為n(n <= 10^5)的「01」串,你可以任意交換乙個為0的位和乙個為1的位,若這兩位相鄰,花費為x,否則花費為y。求通過若干次交換後將串中的「1」全部變換到「0」前面的最小花費。
第一行乙個整數t(1 <= t <= 10),表示測試資料的組數。接下來3*t行,每組資料三行,第一行為整數x(1 <= x <= 10^3),第二行為整數y(x <= y <= 10^3),第三行是「01」串。
最小花費。
2121100120011 03
福州大學第十二屆程式設計競賽
題意:如題。
做法:因為移動的步數是固定,所以每次交換最前面的0和1,然後其位置記為a,b,取min((b-a*)*x,y)即可,然後把這些值累加就是ans。
#include #include #include #include #include #include #include #include #include #define esp 1e-6
#define inf 0x0f0f0f0f
#define ll long long
using namespace std;
int main()
for(i=0,k=0;ii)}}
printf("%d\n",ans);
}}
思路題 貪心 fzu oj 2197 最小花費
題意 給乙個01串,相鄰的01交換代價為x,否則為y。問把全部1變到0前面的最小費用。思路 對於 01011 11100 如果只靠相鄰位移動是需要5步的。然而不管怎麼移動,步數是固定的。那我們就把最前面的0和最後面的1交換 假設0在i,1在j。我們交換的代價就是min y,x j i 然後累加求和就...
最小花費 Dijkstra
原題鏈結傳送門 d es crip tion description descri ptio n在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問a最少需要多少錢使得轉賬後b收到100元。i np ut inp...
砍樹最小花費
題意 有n種樹,每種樹給出高度h,砍掉每顆樹的花費c,每種樹的數量p,現在要砍掉一些樹,使得最高的樹的數量超過所有樹的一半,問最小花費。不同種類的樹高度可能相同 題解 列舉不同的高度,把高於它的樹都砍掉,然後比它矮的樹挑便宜的砍,使得該高度的樹佔所有樹的1 2 1。給樹按高度排序,首先可以用字尾和預...