DP 51 Nod 1274 最長遞增路徑

2021-08-09 14:52:13 字數 575 閱讀 2796

乙個無向圖,可能有自環,有重邊,每條邊有乙個邊權。你可以從任何點出發,任何點結束,可以經過同乙個點任意次。但是不能經過同一條邊2次,並且你走過的路必須滿足所有邊的權值嚴格單調遞增,求最長能經過多少條邊。

以此圖為例,最長的路徑是:

3 -> 1 -> 2 -> 3 -> 2 或

3 -> 1 -> 2 -> 3 -> 4 長度為4。

很自然想到將邊排序。

然後dp。

但是要注意邊相同的情況。

#include

#include

using

namespace

std;

const

int maxn=50005;

struct jz

for (int i=1;i<=n;i++) ans=max(ans,f[i]);

printf("%d\n",ans);

return

0;}

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

題目鏈結 定義dp i 走到頂點i的最長路徑。為了動態規劃的無後效性,得先把邊按權值排序。為了不讓頂點之間的dp值重複計算,得把上一次的dp值儲存下來。由於需要嚴格遞增,所以權值相同的邊用到的dp值是一樣的,所以可以一次把所有權值相同的邊一起加入圖里,然後更新答案。d p u m ax d p u ...

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

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

51nod 1274 最長遞增路徑

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