記憶化搜尋 hdu1428 漫步校園

2021-09-18 02:01:55 字數 794 閱讀 4075

思路:有幾條可到達的路線是很常規的dp,假設u->v ,那麼dp[u]+=dp[v]

下一步一定要更加逼近終點而不是遠離終點,用bfs去跑距(n,n)的最短路徑。

本題可以與dijkstra堆優化過程中統計最短路條數進行對比:

本題:dp[i][j] (i,j)到終點的最短路條數;採用記憶化搜尋方式,自下而上

dijkstra堆優化:dp[i] 代表起點到i的最短路條數;遞推,自上而下

#include#include#include#includeusing namespace std;

const int n=55;

typedef long long ll;

struct node

node(int x,int y,ll s):x(x),y(y),s(s){}

bool operator

};int a[n][n];

int vis[n][n];

int dist[n][n];

ll dp[n][n]; //從i,j出發到終點有多少條路

int dx[4]=;

int dy[4]=;

int n;

void bfs()}}

}ll dfs(int x,int y)

bfs();

dp[n][n]=1;

cout

Hdu 1428(記憶化搜素 最短路)

hdu 1428 思路 求出圖的逆向最短路,即每個點到 n,n 的最短路,然後求出 1,1 到 n,n 的最短路的數量,num i j 記錄點 1,1 到 i,j 過程中的最短路的條數,然後遇到之前求過最短路的點就直接返回,否則求解後再返回。參考文章 include include include ...

HDU 1428 漫步校園 特殊的最短路

這裡需要讀懂題意中的一句話 另外,他考慮從a區域到b區域僅當存在一條從b到機房的路線比任何一條從a到機房的路線更近 否則可能永遠都到不了機房了 這句話的意思是從 1,1 到 n,n 的所有路徑中,只選擇距離最短的路徑,並輸出最短路徑的條數。就是我們找出最短距離後,看看有多少條路到達目的地是最短距離。...

hdu3779 記憶化搜尋

兩列火車入站,重新排列的車廂符不符合要求 記憶化搜尋,ans i j 記錄的是第一列火車的第i節和第二列火車的第j列在組合後的序列裡找不找的到 如果找的到就標記為1,因為是從前到後搜尋,所以在ans n m 1時,表示符合 include include includeusing namespace...