題目鏈結
定義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...