租用游艇
題目描述 長江游艇俱樂部在長江上設置了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
雖然只是一道普及-的DP,但我堅持用Floyd做出來了。(盡管沒多大區別)(因為實在切不動其他難度的Floyd了,心很累······)
但貌似Dijsktra也可以,盡管我沒有編。
思路就當DP的題吧。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define inf 999999999
#define mem(a,b) memset(a,b,sizeof(a));
using namespace std;
int f[100001];
int dist[10001];
int a[1001][1001];
int d[10001][10001];
int main(){
int n,j,k,l,i;
scanf("%d",&n);
for(j=0;j<=n;j++){
for(k=0;k<=n;k++){
a[j][k]=inf;
if(j==k){
a[j][k]=0;
}
}
}
for(j=1;j<=n;j++){
for(k=j+1;k<=n;k++){
scanf("%d",&a[j][k]);
}
}
for(j=1;j<=n;j++){
for(k=1;k<=n;k++){
for(i=1;i<=n;i++){
a[k][i]=min(a[k][i],a[k][j]+a[j][i]);
}
}
}
printf("%d",a[1][n]);
return 0;
}
總結
- 上一篇: mysql校对规则
- 下一篇: VS中文档大纲视图的作用