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

2022-05-08 02:09:09 字數 897 閱讀 2411

題面

大意:在乙個n*m的矩形中從(1,1)走到(n,m)而且走過的路徑是一條回文串,統計方案數

sol:我們考慮從(1,1)和(n,m)兩端開始算,這樣就只要保證每次經過的字元一樣就可以滿足回文了,因為一定有乙個迴圈需要列舉步數,知道了步數自然只要知道了x座標就可以算出y座標了,於是只要列舉x1和x2了,因為當前這步一定是從上一步轉移過來的,就可以滾存了

#includeusing

namespace

std;

#define mod 1000000007

long

long n, m, f[2][505][505], ans = 0

;char map[505][505

];inline

void add(long

long &x, long

long y)

intmain()

long

long cur = 0

; f[cur][

1][n] = 1

;

for(long

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

}for(long

long i = 1; i <= n; i++)

add(ans, f[cur][i][i]);

if((n + m) & 1

)

for(long

long i = 1; i < n; i++)

add(ans, f[cur][i][i + 1

]); printf(

"%lld\n

", ans);}}

view code

豬和回文 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去解決。題目是從起點出發走,我們可以從起點和終點各出發乙個點,每次兩個點各走一步,當然這兩步所對應的字元是要一樣的。於是,定義d step x1 y2 x2 y2 表示第step時第乙個點走到 x1,y1 第二個點走到 x2,y2 時 當然了,這兩個點的字元肯定是相同的 的方法數...