題目大意:euphemia到乙個n*n的藥草田裡採藥,她從左上角的格仔田(第一行,第一列)出發,要到達右下角(第n行,第n列)的格仔田,每次她可以走到與當前格仔有邊相鄰的格仔去,但她不會走已經走過的格仔,而且出於對美的要求,她走過的路徑是關於 左下-右上 對角線對稱的。由於地勢不同,在每個格仔田採藥都會有乙個疲勞度tij,euphemia想知道:有多少條合法路徑,可以使得她採藥的疲勞度最小。
多組資料。
每組資料第一行乙個整數n,接下來n行,每行n個非零數字(1,2,3...9中乙個),表示格仔田的疲勞度。
當n=0,輸入結束。
對於每組資料,輸出乙個整數表示答案,答案%1000000009。
21 11 1
31 1 1
1 1 1
2 1 1
0
2對於20%的資料滿足n<=5。3
對於另外20%的資料滿足n<=40。
對於100%的資料滿足n<=100,不超過50組資料。
1s256m
題目分析:因為要關於副對角線對稱,所以不妨直接將矩陣沿著副對角線對折,因為要求最短路,所以不妨直接求出以點(1,1)為起點的單源最短路,期間用dp維護一下最短路路徑的數量,最後累加一下就好了,這個dp我是直接從網上拿的模板,迪傑斯特拉+dp
**:
#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const int n=110;
const int mod=1e9+9;
const int b[4][2]=;
int maze[n][n],n;
bool vis[n][n];
int d[n][n];
ll dp[n][n];
struct node
bool operator<(const node& a)const
}; void dijkstra()
else if(d[xx][yy]==d[x][y]+w)
dp[xx][yy]=(dp[xx][yy]+dp[x][y])%mod;
}}}
int main()
return 0;
}
Codeup最短路徑 最短路徑
n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離。第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路,接下來m行兩個整數,表示相連的兩個城市的編號。n 1行,表示0號城市到其他城市的最短路,如果無法到達,輸出...
Codeup最短路徑 最短路徑問題
給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t 起點s,...
最短路徑之最短路徑問題
提交 狀態 討論版 命題人 外部匯入 題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點間的直線距離。現在的 任務是找出從一點到另一點之間的最短路徑。輸入共n m 3行,...