51nod 1274 最長遞增路徑(dp)

2021-10-05 21:55:46 字數 1051 閱讀 8439

題目鏈結

定義dp[i]:走到頂點i的最長路徑。

為了動態規劃的無後效性,得先把邊按權值排序。為了不讓頂點之間的dp值重複計算,得把上一次的dp值儲存下來。由於需要嚴格遞增,所以權值相同的邊用到的dp值是一樣的,所以可以一次把所有權值相同的邊一起加入圖里,然後更新答案。

d p[

u]=m

ax(d

p[u]

,f[v

]+1)

dp[u] = max(dp[u], f[v] + 1)

dp[u]=

max(

dp[u

],f[

v]+1)dp

[v]=

max(

dp[v

],f[

u]+1

)dp[v] = max(dp[v], f[u] + 1)

dp[v]=

max(

dp[v

],f[

u]+1

)

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

5e4+

10, inf =

0x3f3f3f3f

, mod =

1e9+7;

struct e

}a[maxn]

;int f[maxn]

, dp[maxn]

;int

main()

sort

(a, a + m)

;int i =

0, j =1;

while

(j < m)

cout <<

*max_element

(dp, dp + n)

<< endl;

//fclose(stdin);

//fclose(stdout);

return0;

}

51nod 1274 最長遞增路徑

1274 最長遞增路徑 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 乙個無向圖,可能有自環,有重邊,每條邊有乙個邊權。你可以從任何點出發,任何點結束,可以經過同乙個點任意次。但是不能經過同一條邊2次,並且你走過的路必須滿足所有邊的權值嚴格單調...

51nod1274 最長遞增路徑

將邊排序後dp一下就可以了。include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i s i t i define clr x,c ...

51nod 1274 最長遞增路徑(DP)

一開始自己想了一種跑的巨慢。寫了題解的做法又跑的巨快。一臉懵逼 顯然要求邊權遞增就不可能經過重複的邊了,那麼設f i 為第i條邊出發能走多遠就好了,這是我一開始的寫法,可能dfs冗餘狀態較多,跑的極慢 include include include include include include i...