思路:有幾條可到達的路線是很常規的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...