8 9 景觀美化 2495

2021-08-05 23:02:33 字數 1931 閱讀 2321

農夫約翰最近決定來美化他的花園,他需要運輸很多的泥土。花園是由n塊花圃組成的。第i塊花圃初始的時候有ai數量的泥土。為了達到美化的目的,必須使得第i塊花圃的泥土數量ai變成bi。

約翰有三個選擇:第一,他可以買乙個單位的泥土放進任意花圃中,代價是x;第二,他可以將乙個單位的泥土從某乙個花圃中除去,代價是y;第三,他可以將第i塊花圃中的乙個單位的泥土搬運到第j塊花圃中,大家是z*|i-j|。

問題描述

請幫助約翰計算為了達到目的最小需要花費的代價。

資料範圍:1<=n<=100,0<=ai,bi<=10,0<=x,y,z<=1000

4 100 200 1 210

1 4

2 3

3 2

4 0

發現a[i],b[i]都很小,於是想到可以把每一塊花圃拆開來。如樣例可拆成:1223334444和111122233。於是問題就轉換成了與編輯字元距離類似的問題,但與編輯字元距離又有一點不同:這裡是移動字元然後轉換成需要的字元,而後者是直接轉換。

定乙個f[i,j]表示已經把原串從1-i的部分和目標串1-j的部分編輯成相同的

在把原串轉換成目標串的過程中有三種操作:

1.插入乙個字元:【】:f[i,j]=f[i,j-1]+x:【】:f[i,j-1]表示原串1——i部分與目標串1——j-1部分相同,此時要使原串1——i與目標串1——j部分相同,就應插入乙個字元,付出代價為x

2.刪除乙個字元 f[i,j]=f[i-1,j]+y

3.移動乙個字元並轉換成任意字元 f[i,j]=f[i-1,j-1]+z*abs(a[i]-b[j]) a即原串,b即目標串

初始化:

當原串為空時,需插入與目標串長度相同的字元,代價為i*x

當目標串為空時,需刪去與原串長度相同的字元,代價為i*y時間

複雜度o

(ai∗

bi∗n

2)另一種思路:f[i][j]表示前i塊花圃多了j塊泥土,當然j可以是負數,比如-2就表示他少了2塊.f[i+1][k]=f[i][j]+j*z+cost ,cost=k-j-(a[i]-b[i])多了賣掉,少了買進(僅供參考,未經編寫)

var

n,x,y,z,i,j,k,e,s,t,ans:longint;

f:array[0..1000,0..1000]of longint;

a,b:array[1..1000]of longint;

function

min(a,b,c:longint):longint;

begin

if bthen a:=b;

if cthen a:=c;

exit(a);

end;

begin

readln(n,x,y,z);

for i:=1

to n do

begin

readln(s,t);

for j:=1

to s do

begin

inc(k);

a[k]:=i;

end;

for j:=1

to t do

begin

inc(e);

b[e]:=i;

end;

end;

for i:=0

to e do

f[0,i]:=i*x;

for i:=1

to k do

f[i,0]:=i*y;

for i:=1

to k do

for j:=1

to e do

begin

f[i,j]:=min(f[i-1,j]+y,f[i,j-1]+x,f[i-1,j-1]+z*abs(a[i]-b[j]));

end;

writeln(f[k,e]);

end.

人臉美化隨筆2 美化演算法總結

想要站在巨人的肩膀上,首先要找的巨人。我可能是屬狗熊的,在玉公尺地裡掰乙個扔乙個,走到最後發現手裡神馬也木有。最近終於決定做乙個現代化的狗熊,將這些玉公尺串起來打包帶走,雖然並不知道這和現代化有神馬關係,但是這不重要。重要的是!我的行動硬碟壞了,所有資料瞬間清空,所以我發現硬體略不靠譜啊,寫在網上的...

MFC 學習之 介面美化 2

1 更改圖示 將icon圖示複製到資源檔案中,載入工程,設定id。在對話方塊建構函式中,修改icon的id。2 直接換膚 skinshape工具的skinh.dll skinh.ib skinh.she skinh.h 均拷貝到工程目錄下。stdafx.h 中新增 include skinh.h p...

yii2 url 美化引數

所謂的url引數美化就是將冗長的字串 進行正則替換 yii2 框架的url引數美化完成需要完成兩個階段 第乙個階段分apache和nginx 兩種的配置 apache 1.1 必須開啟rewrite 模式 http.conf 中 loadmodule rewrite module modules m...