日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

poj3249Test for Job(记忆化搜索)

發(fā)布時間:2025/3/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj3249Test for Job(记忆化搜索) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 /* 2 題意:給一個DAG圖,n個節(jié)點,每個節(jié)點都對應(yīng)一個值,入度為零的點走到出度為零的點,計算所有可能路徑 3 經(jīng)過節(jié)點值的和最大! 4 5 思路:記憶話搜索:也就是如果我們搜索到某一個節(jié)點的時候發(fā)現(xiàn)該節(jié)點已經(jīng)存在了值,那么直接返回該節(jié)點的值! 6 和回溯的思想差不多吧! 7 8 注意:我們是正向建圖,并且記憶話搜索是先將子節(jié)點的最優(yōu)值計算出來,然后在計算父節(jié)點的最優(yōu)值 9 所以最終的最優(yōu)值的結(jié)果在 入度為0的節(jié)點上! 10 */ 11 #include<iostream> 12 #include<cstdio> 13 #include<cstring> 14 #include<algorithm> 15 #include<vector> 16 #define INF -0x3f3f3f3f 17 #define N 100005 18 using namespace std; 19 20 vector<int>g[N]; 21 int v[N], dp[N], vis[N]; 22 int n, m; 23 24 int dfs(int u){ 25 if(g[u].size()==0) 26 return dp[u]=v[u]; 27 if(dp[u]!=INF) return dp[u];//如果u節(jié)點已經(jīng)根據(jù)其 子節(jié)點 計算過了,直接返回 28 int len=g[u].size(); 29 for(int i=0; i<len; ++i)//否則從它的子節(jié)點值 計算它的值! 30 dp[u]=max(dp[u], dfs(g[u][i])+v[u]); 31 return dp[u]; 32 } 33 34 int main(){ 35 while(scanf("%d%d", &n, &m)!=EOF){ 36 for(int i=1; i<=n; ++i) 37 scanf("%d", &v[i]); 38 memset(vis, 0, sizeof(vis)); 39 for(int i=1; i<=n; ++i) 40 dp[i]=INF; 41 while(m--){ 42 int u, v; 43 scanf("%d%d", &u, &v); 44 g[u].push_back(v); 45 vis[v]=1; 46 } 47 for(int i=1; i<=n; ++i) 48 if(!vis[i]) 49 dfs(i); 50 51 int maxCost=INF; 52 for(int i=1; i<=n; ++i){ 53 if(!vis[i] && dp[i]>maxCost) 54 maxCost=dp[i]; 55 g[i].clear(); 56 } 57 printf("%d\n", maxCost); 58 } 59 return 0; 60 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/hujunzheng/p/3932043.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的poj3249Test for Job(记忆化搜索)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。