P1359 租用遊艇
阿新 • • 發佈:2018-02-14
strong 計算 簡單的 之間 輸入 結束 div col c代碼
題目描述
長江遊艇俱樂部在長江上設置了n 個遊艇出租站1,2,…,n。遊客可在這些遊艇出租站租用遊艇,並在下遊的任何一個遊艇出租站歸還遊艇。遊艇出租站i 到遊艇出租站j 之間的租金為r(i,j),1<=i<=j<=n。試設計一個算法,計算出從遊艇出租站1 到遊艇出租站n 所需的最少租金。
對於給定的遊艇出租站i 到遊艇出租站j 之間的租金為r(i,j),1<=i<j<=n,編程計算從遊艇出租站1 到遊艇出租站n所需的最少租金。
保證計算過程中任何時刻數值都不超過10^6
輸入輸出格式
輸入格式:
由文件提供輸入數據。文件的第1 行中有1 個正整數n(n<=200),表示有n個遊艇出租站。接下來的n-1 行是一個半矩陣r(i,j),1<=i<j<=n。
輸出格式:
程序運行結束時,將計算出的從遊艇出租站1 到遊艇出租站n所需的最少租金輸出到文件中。
輸入輸出樣例
輸入樣例#1: 復制3 5 15 7輸出樣例#1: 復制
12
跟上題一樣,很簡單,但是有很多種方法,有人用dijistra加堆優化,spfa什麽的……
明明這題是純dp,那麽簡單的代碼非得寫成最短路是很累的……
看看我的代碼這麽少,233……
AC代碼如下:
#include<cstdio> using namespace std; const int N=200+5; int f[N],l,n; int main() { scanf("%d",&n);for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) scanf("%d",&l),f[j]=f[j]>(f[i]+l)||!f[j]?f[i]+l:f[j]; printf("%d",f[n]); return 0; }
P1359 租用遊艇