copy從盧牛那裡聽說在一片叫yz的神的領域埋藏著不少寶藏,於是copy來到了這個被劃分為個區域的神地。盧牛告訴了copy這裡共有個寶藏,分別放在第pi個(1<=pi<=n)區域。copy還得知了每個區域之間的距離。現在copy從1號區域出發,要獲得所有的寶藏並到n號區域離開。copy很懶,只好來找你為他尋找一條合適的線路,使得他走過的距離最短。
輸入格式:
第一行乙個正整數n(1<=n<=100)
接下來乙個n*n的矩陣,第i+1行第j列的數字表示區域i,j之間的距離。每個距離用空格隔開,距離保證i,j<=1000。請注意的i to j距離並不一定等於j to i的距離。
第n+2行乙個整數p(0<=p<=10)。
第n+3行共p個用空格隔開的整數,表示有寶藏的區域編號。
輸出格式:
乙個整數,為copy獲得全部寶藏需要的最短距離。資料保證答案小於等於maxlongint。
輸入樣例#1:
樣例輸入120 4
5 02
1 2樣例輸入2
30 2 6
1 0 4
7 10 0
12
輸出樣例#1:
樣例輸出14樣例輸出1
6
對30%的資料,1<=n<=15,其餘如題所述。
對100%的資料,全部資料範圍如題所述。
模擬賽做太多,自信心都沒了。。。
只好做水題了。。。最短路,二話不說 floyd 。。。
注:stl **好。。。
附**:
#include#include#include#define max 999999999
#define maxn 110
using namespace std;
int n,q,ans=2147483646,num[maxn],a[maxn][maxn];
inline int read()
while(c>='0'&&c<='9')
return date*w;
}void floyd()
int main(){
int x;
n=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=read();
floyd();
q=read();
for(int i=1;i<=q;i++)num[i]=read();
sort(num+1,num+q+1);
do{int s=a[1][num[1]]+a[num[q]][n];
for(int i=1;i
洛谷P1690 貪婪的Copy 題解
這道題就是一道最短路的題目,因為看到資料範圍 n 100 n leq100 n 10 0 所以考慮使用flo yd floyd floyd 我們先用o n 3 o n 3 o n3 的時間複雜度來跑一遍flo yd floyd floy d,然後考慮每個藏寶點,發現藏寶點p的範圍 p 10 p le...
洛谷P1690 貪婪的Copy 題解
這道題就是一道最短路的題目,因為看到資料範圍 n 100n leq100n 100 所以考慮使用floydfloydfl oyd 我們先用o n3 o n 3 o n3 的時間複雜度來跑一遍floydfloydfl oyd,然後考慮每個藏寶點,發現藏寶點p的範圍 p 10p leq10p 10我們可...
洛谷P1690 貪婪的Copy 題解
這道題就是一道最短路的題目,因為看到資料範圍 n 100n 100 所以考慮使用flo ydfl oyd我們先用o n 3 o n3 的時間複雜度來跑一遍flo ydfl oyd,然後考慮每個藏寶點,發現藏寶點p的範圍 p 10p 1 0我們可以考慮所有情況的窮舉,所以說是乙個數列的全排列,最多隻需...