poj 3249 bfs dp或者記憶化搜尋

2021-06-22 05:42:45 字數 1763 閱讀 4549

思路:dp[i]表示到點i的最大收益,初始化為-inf,然後從入度為0點開始bfs就可以了,一開始一直tle,然後優化了好久才4000ms險過。

之後有寫了個dfs記憶化搜尋,果然快多了。

bfs ac code:

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7#define maxn 100100

8#define maxm 2002000

9#define inf 1<<30

1011

struct

edgeedge[maxm];

1415

intn,m,ne;

16int

head[maxn];

1718

void insert(int u,int

v)19

2425

intin_degree[maxn],out_degree[maxn];

26int

dp[maxn],value[maxn];

27bool

mark[maxn];

2829

void

bfs()

3039

while(!que.empty())50}

51}52}

53}5455

56int

main()

5771

bfs();

72 ans=-inf;

73for(int i=1;i<=n;i++)

76 printf("

%d\n

",ans);77}

78return0;

79 }

view code

dfs 記憶化 ac code:

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7#define maxn 100100

8#define maxm 2002000

9#define inf 1<<30

1011

struct

edgeedge[maxm];

1415

intn,m,ne;

16int

head[maxn];

1718

void insert(int u,int

v)19

2425

intin_degree[maxn],out_degree[maxn];

26int

dp[maxn],value[maxn];

2728

int dfs(int

u)29

37if(ans!=-inf)

40return

dp[u];41}

4243

intmain()

4458 ans=-inf;

59 fill(dp,dp+1+n,-inf);

60for(int i=1;i<=n;i++)64}

65 printf("

%d\n

",ans);66}

67return0;

68 }

view code

POJ 3249 拓撲排序 動態規劃

該題是讓求在乙個有向無環圖中,從乙個入度為 0 的節點出發,到乙個出度為 0 的節點的最大的權值問題。我們可以使用廣搜,但是會超時,上網查了一下解題報告,可以使用拓撲排序 動態規劃來解決此問題 dp 1 max dp 2 cost 2 dp 4 dp 3 cost 3 dp 4 dp 4 cost ...

POJ 3249 記憶化搜尋,,,,DAG最長路

題目大意 給出n個點,m條邊,每個點都提供了相對的點權值,然後給出相連著的邊,問從起點走到終點最大利潤值。起點是入度為0的點,終點是出度為0的點。思路1 spfa求最長路,正向建邊tle,反向建邊4400msac。2 記憶化搜尋,每次都儲存當前點到終點獲得的最大利潤。ac 搜尋 1844ms inc...

poj3984(BFS)迷宮路徑

迷宮問題 time limit 1000ms memory limit 65536k total submissions 6112 accepted 3539 description 定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,...