題目:
某地鐵沿線共設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...