JZOJ8 15(C組)地鐵建設

2021-07-16 16:51:31 字數 1379 閱讀 1093

題目:

某地鐵沿線共設n站,可分為u(地面式)、d(地下式)和c(複合式)三種型別。為避免單調,相鄰地鐵站的型別不能重複。同時,由於地鐵站所處環境和地質條件有所差異,每個站點按不同型別的建設成本也不盡相同。現給定各站點的三種建設成本,請計算出該地鐵線的最低總造價。

分析:這道題 用了dp來解決,用f[i,j]來表示1~i中,第i個地鐵站用了第j中模式來建設(1<=j<=3),初始化f[1,j]預設都選了第個模式,然後dp,方程是:

f[i,1]:=min(f[i-1,2],f[i-1,3])+cost[i,1];

f[i,2]:=min(f[i-1,1],f[i-1,3])+cost[i,2];

f[i,3]:=min(f[i-1,1],f[i-1,2])+cost[i,3];

最後輸出f[n,1],f[n,2],f[n,3]之中的最小值。

附上**:

const

maxn=200000;

varcost,f:array [0..maxn,1..3] of longint;

n:longint;

procedure init;

vari,j,k:longint;

begin

readln(n);

for i:=1 to n do

for j:=1 to 3 do

read(cost[i,j]);

f[1,1]:=cost[1,1];

f[1,2]:=cost[1,2];

f[1,3]:=cost[1,3];

end;

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

begin

if aexit(a);

exit(b);

end;

function min1(a,b,c:longint):longint;

begin

if amin1:=a

else

min1:=b;

if cmin1:=c;

end;

procedure main;

vari,j:longint;

begin

for i:=2 to n do

begin

f[i,1]:=min(f[i-1,2],f[i-1,3])+cost[i,1];

f[i,2]:=min(f[i-1,1],f[i-1,3])+cost[i,2];

f[i,3]:=min(f[i-1,1],f[i-1,2])+cost[i,3];

end;

write(min1(f[n,1],f[n,2],f[n,3]));

end;

begin

init;

main;

end.

JZOJ8 15(C組)電話時間

題目 某人總是花很多時間給父母打 有一次他記錄了打 的開始時間和結束時刻t1和t2,請你幫他算算此次通話一共用了多少秒。又有一次,他記錄了打 的開始時刻t1和通話的時間長度len,請你幫他計算他在什麼時刻結束通話。已知每次通話時間小於24個小時。分析 純模擬啦。附上 vart,q longint h...

JZOJ 4 1 C組 飛越原野 bfs

description 勇敢的德魯伊法里奧出色的完成了任務之後,正在迅速的向自己的基地撤退。但由於後面有著一大群追兵,所以法里奧要盡快地返回基地,否則就會被敵人捉住。終於,法里奧來到了最後一站 泰拉希爾原野,穿過這裡就可以回到基地了。然而,敵人依然緊追不捨。不過,泰拉希爾的地理條件對法里奧十分有利,...

JZOJ 7 7C組第三題 頁

給出奇數個數,每次把它中間的數取出來放到最左邊或最右邊,求出最少取多少次可以讓這些數是從小到大的。bfs hash判重。每次左邊右邊操作一次,判斷之前有沒有出現過了,沒有就入隊。include define maxn 300017 using namespace std int n,state 10...