洛谷 1108 低價購買

2022-05-25 20:48:13 字數 1286 閱讀 1844

《愛與愁的故事第三彈·shopping》第一章。

中山路店山店海,成了購物狂愛與愁大神的「不歸之路」。中山路上有n(n<=100)家店,每家店的座標均在-10000~10000之間。其中的m家店之間有通路。若有通路,則表示可以從一家店走到另一家店,通路的距離為兩點間的直線距離。現在愛與愁大神要找出從一家店到另一家店之間的最短距離。你能幫愛與愁大神算出嗎?

共n+m+3行:

第1行:整數n

第2行~第n+1行:每行兩個整數x和y,描述了一家店的座標

第n+2行:整數m

第n+3行~第n+m+2行:每行描述一條通路,由兩個整數i和j組成,表示第i家店和第j家店之間有通路。

第n+m+3行:兩個整數s和t,分別表示原點和目標店

僅一行:乙個實數(保留兩位小數),表示從s到t的最短路徑長度。

輸入 #1複製

5

0 02 0

2 20 2

3 15

1 21 3

1 42 5

3 51 5

輸出 #1複製

3.41

100%資料:n<=100,m<=1000

題解:最短路(各類方法皆可用,而我選擇了我最 i 的floyd)

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int oo=0x3f3f3f3f

;const

int n=102

;double

f[n][n];

intn,m,x[n],y[n],ss,tt,a,b;

double js(int a1,int a2,int b1,int

b2)

intmain()

for(int k=1;k<=n;k++)

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

if(i!=j && i!=k && k!=j)

f[i][j]=min(f[i][j],f[i][k]+f[k][j]);

scanf(

"%d %d

",&ss,&tt);

printf(

"%.2f\n

",f[ss][tt]);

return0;

}

洛谷 P1108 低價購買

題目 低價購買 思路 第一問求最長下降子串行,o n 2 的複雜度就夠了。第二問如果不考慮重複的情況,也好做。令g i 表示最長下降子串行長為f i 時的方案數,g i g j j 1,i 最終方案數為 g i i 1,n 然後再減去重複的情況。假設存在一組i,j使得f i f j 且a i a j...

洛谷P1108 低價購買

題目鏈結 n 5000 n 2的演算法是可以接受的 第乙個數字顯然是求最長下降子串行,可以n 2或nlogndp 要求方案數,可以在n 2演算法中做一些修改,dp求方案數 dp i 表示以第i個數為結尾的最長下降子串行 f i 表示以第i個數為結尾的最長下降子串行的個數 當a j 而當a i a j...

洛谷P1108 低價購買

1 include2 using namespace std 3const int maxn 5005 4 int n,len ans 1 ans 5int a maxn d maxn len maxn f maxn 6int search int l,int r,int val 714 retur...