題意:
給乙個01串,相鄰的01交換代價為x,否則為y。
問把全部1變到0前面的最小費用。
思路:對於 01011->11100
如果只靠相鄰位移動是需要5步的。
然而不管怎麼移動,步數是固定的。
那我們就把最前面的0和最後面的1交換
假設0在i,1在j。我們交換的代價就是min(y,x*(j-i))
然後累加求和就好了!
很棒的腦洞題!
**:#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"queue"
#include"algorithm"
#include"iostream"
#include"map"
#define ll __int64
using namespace std;
ll v1[123456];
char v[123456];
int main()
{ int t;
cin>>t;
while(t--)
{ll x,y;
scanf("%i64d%i64d",&x,&y);
scanf("%s",v);
int len=strlen(v);
int cnt=0;
for(int i=len-1;i>=0;i--) if(v[i]=='1') v1[cnt++]=(ll)i; //找全部1的位置
ll ans=0;
int j=0; //處理到第幾個1
for(int i=0;i
貪心 公式推導 思路
submit page time limit 1 sec memory limit 128 mb submitted 11 solved 8 zj開公司,年年榮登315晚會。315當天,一大幫員工來zj公司討工資。顯然又欠工資了囧 員工們圍成乙個圈,把zj圍在中間,打算用暴力手段討取工資。機智如zj...
演算法題思路
鍊錶反轉 思路雙鏈表頭插法 利用棧查詢陣列不重複的值 思路利用異或運算 相同數值為0 任何職異或0為他本身的特性 計算質數 思路首先依次判斷2 n的各個數是否是質數 在暴力解法上優化,判斷乙個數是否是質數 只需要不能整除2到根號n之間的數就不是質數 2 n n大於1的數可以直接跳過肯定不是質數 使用...
hdu 6301 思路貪心
這個題如果從直接的想法做很簡單,但是時間肯定過不去,難處理的在於如何把用完了的數字重新利用 這個題解是dls的 大體思路是用pre i 記錄i所在的區間的左端點,然後設定乙個標記用來記錄已經處理完的位置 不是填完數字的位置,是既填完了數字又將可利用的數字處理完了的位置 當標記小於pre i 時表明 ...