1. 程式人生 > >P1359 租用遊艇

P1359 租用遊艇

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 租用遊艇