51Nod 1503 豬和回文

2022-06-20 22:00:13 字數 1097 閱讀 8983

思路:沒想到要用dp去解決。

題目是從起點出發走,我們可以從起點和終點各出發乙個點,每次兩個點各走一步,當然這兩步所對應的字元是要一樣的。

於是,定義d[step][x1][y2][x2][y2],表示第step時第乙個點走到(x1,y1),第二個點走到(x2,y2)時(當然了,這兩個點的字元肯定是相同的)的方法數。

因為此時的方法數是基於上一步的情況,所以用滾動陣列即可,而y又可根據x和step求出,所以可以將陣列維數縮小至3維。

注意n+m是奇數時的情況,需要額外計數。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;910

const

int mod=1e9+7;11

12int

n,m;

13char map[505][505

];14

int d[2][505][505

];15

16void add(int &x,int

y)17

2021

intmain()

2233

34int cur=0

;35 d[0][1][n]=(map[1][1]==map[n][m]);

3637

for(int step=1;step<=(n+m-2)/2;step++)

3855}56

int ans=0;57

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

58add(ans,d[cur][i][i]);

59if((n+m)%2)60

for(int i=1;i)

61 add(ans,d[cur][i][i+1

]);62 printf("

%d\n

",ans);63}

64 }

豬和回文 51Nod 1503

dp i j k l 代表從 1,1 到 i,j 與從 n,m 到 k,l 對稱相等的路徑有多少 轉移方程為dp i j k l dp i 1 j k 1 l dp i 1 j k l 1 dp i j 1 k 1 l dp i j 1 k l 1 因i 1 j 1 n k m l恆成立 所以由i ...

51nod 1503 豬和回文

乙隻豬走進了乙個森林。很湊巧的是,這個森林的形狀是長方形的,有n行,m列組成。我們把這個長方形的行從上到下標記為1到n,列從左到右標記為1到m。處於第r行第c列的格仔用 r,c 表示。剛開始的時候豬站在 1,1 他的目標是走到 n,m 由於豬回家心切,他在 r,c 的時候,只會往 r 1,c 或 r...

51nod 1503 豬和回文(dp滾存)

題面 大意 在乙個n m的矩形中從 1,1 走到 n,m 而且走過的路徑是一條回文串,統計方案數 sol 我們考慮從 1,1 和 n,m 兩端開始算,這樣就只要保證每次經過的字元一樣就可以滿足回文了,因為一定有乙個迴圈需要列舉步數,知道了步數自然只要知道了x座標就可以算出y座標了,於是只要列舉x1和...