[DP]城市交通

城市交通

Time Limit:1000MS——Memory Limit:65536K

題目描述

有n個城市,編號1~n,有些城市之間有路相連,有些則沒有,有路則當然有一個距離。現在規定只能從編號小的城市到編號大的城市,問你從編號爲1的城市到編號爲n的城市之間的最短距離是多少?

輸入

先輸入一個n,表示城市數,n小於100。
下面的n行是一個n*n的鄰接矩陣map[i,j],其中map[i,j]=0表示城市i和城市j之間沒有路相連,否則爲兩者之間的距離。

輸出

輸出格式:一個數,表示最少要多少時間。
輸入數據保證可以從城市1飛到城市n。

樣例輸入

11
0 5 3 0 0 0 0 0 0 0 0
5 0 0 1 6 3 0 0 0 0 0
3 0 0 0 8 0 4 0 0 0 0
0 1 0 0 0 0 0 5 6 0 0
0 6 8 0 0 0 0 5 0 0 0
0 3 0 0 0 0 0 0 0 8 0
0 0 4 0 0 0 0 0 0 3 0
0 0 0 5 5 0 0 0 0 0 3
0 0 0 6 0 0 0 0 0 0 4
0 0 0 0 0 8 3 0 0 0 3
0 0 0 0 0 0 0 3 4 3 0

樣例輸出

13

解題思路
如果可以走的話,就選擇走或者不走。注意min函數不要打錯(血的教訓

AC完整程序

#include<stdio.h>
int min(int a,int b){
	return a<b?a:b;
}
int main(){
	int n,t,sum[100]={0};
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			scanf("%d",&t);
			if(t>0){
				if(sum[j]>0){
					sum[j]=min(t+sum[i],sum[j]);
				}
			 else sum[j]=t+sum[i];
			}
		}
	}
	printf("%d",sum[n]);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章