source:noip2015-shy4
小 a 要進行一次旅行。這回他要在序號為 1 到 n 的 n 個城市之間旅行。這 n 個城市之間共有 m 條連線兩個城市的單行公路,對於第 i 條公路的風景有乙個評分 ai。小 a 有乙個要求:挑選旅行路線時經過某條路時看到的風景比上一條經過的公路的風景評分更高。小 a 想看到盡可能多的風景,請你告訴他他能找到的最長的滿足他要求旅行路線有多長。(每條公路長度視為1,可以重複經過乙個城市)
第一行為兩個整數數 n,m。
接下來 m 行,每行三個整數 xi,yi,ai 分別代表每條公路的起點序號、終點序號、風景分數。
輸出乙個整數,為滿足要求的最長路線的長度。
輸入
3 3輸出1 2 1
2 3 2
3 1 3
3【樣例說明】
最長路徑為:(1->2->3->1)
【資料範圍】
對 30% 的輸入資料,n≤10;m≤50;ai≤100
對 60% 的輸入資料,n≤1000;m≤5000;ai≤1000
對 100% 的輸入資料,n,m≤300000;1≤ai≤100000
根據條件我們把邊從小到大排個序,然後在邊上做 dp
對於一條邊 e ,我們考慮到 from [ e ] 的最長路線 ,然後加1延長到 to [ e ]
然後就是轉移咯,稍微需要注意的就是邊權相等的話怎麼辦?
對於這種情況,我們多用乙個 g 陣列,相當於上一次的 f 陣列,具體看**咯
#include#include#include#include#include#define n 300009
using namespace std;
int n,m;
int from[n],to[n];
int nxt[n],head[100009];
int g[n],f[n];
int main()
for(i=1;i<=100000;++i)
int ans=-1;
for(i=1;i<=n;++i) ans=max(ans,f[i]);
printf("%d",ans);
return 0;
}
蒟蒻考場想法:暴力。。。dfs,騙了10分。後面又想了一下最短路,好像沒走通
這種排序後依次加邊的題好像做了不止一次了,但沒乙個想出來。下面總結一下:
大概就是如果對邊權有要求,比如說要有大有小,就可以這樣搞
POJ 3230 Travel 動態規劃Dp
大致題意 有一位旅行者想在n個城市中旅行m天,旅行從乙個城市到另乙個城市需要一定的花費,到乙個城市又可以得到錢,但這個錢會隨著時間變化,現在求最大利潤。資料範圍n,m 100 很容易想到dp f i j 表示第i天到城市j的最大利潤 轉移方程 f i j max f i 1 k cost k j e...
4212 旅行規劃(travel)
題意 oivillage 是乙個風景秀美的鄉村,為了更好的利用當地的旅遊資源,吸引遊客,推動經濟發展,xkszltl 決定修建了一條鐵路將當地 n nn 個最著名的經典連線起來,讓遊客可以通過火車從鐵路起點 1 11 號景點 出發,依次遊覽每個景區。為了更好的評價這條鐵路,xkszltl 為每乙個景...
動態規劃 什麼是動態規劃?
先來看看 資訊學奧賽一本通第5版 是怎麼說的 動態規劃程式設計是對解最優化問題的一種途徑 一種方法,而不是一種特殊演算法。不像前面所述的那些搜尋或數值計算那樣,具有乙個標準的數學表示式和明確清晰的解題方法。動態規劃程式設計往往是針對一種最優化問題,由於各種問題的性質不同,確定最優解的條件也互不相同,...