題面
大意:在乙個n*m的矩形中從(1,1)走到(n,m)而且走過的路徑是一條回文串,統計方案數
sol:我們考慮從(1,1)和(n,m)兩端開始算,這樣就只要保證每次經過的字元一樣就可以滿足回文了,因為一定有乙個迴圈需要列舉步數,知道了步數自然只要知道了x座標就可以算出y座標了,於是只要列舉x1和x2了,因為當前這步一定是從上一步轉移過來的,就可以滾存了
#includeusingview codenamespace
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);}}
豬和回文 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 時 當然了,這兩個點的字元肯定是相同的 的方法數...