【USACO 2015 Open Gold】Palindromic Paths 動態規劃
連結:
#include <stdio.h>
int main()
{
puts("轉載請註明出處[vmurder]謝謝");
puts("網址:blog.csdn.net/vmurder/article/details/45222487");
}
題意:
從
n \times n
的矩陣 左上角走到右下角會有一個長度 n+n+1
的字串,問有多少種走法使得路徑字串為迴文?
題解:
f(i,j,k,l)
表示起點橫著走 i
步,豎著走 j
步,終點豎著走 k
步,橫著走 l
步時的迴文方案數。 然後跑動態規劃時
f(i,j,k,l)
可以更新 f(i+1,j,k+1,l)、f(i+1,j,k,l+1)、f(i,j+1,k+1,l)、f(i,j+1,k,l+1)
跑動態規劃的順序是
(i+j)
從小到大。
然後時間複雜度是
O(n^4)
,但是我們發現 (i+j==k+l)
,所以可以少列舉一個 l
,然後時空複雜度就變成 O(n^3)
了,但是這道題64MB,會MLE,然後我們發現 (i+j)
滿足滾動陣列的性質,空間複雜度變成了 O(n^2)
。
程式碼:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 505
#define mod 1000000007
using namespace std;
int n,f[2][N][N];
char s[N][N];
#define add(a,b) (a=(a+b)%mod)
int main()
{
int i,j,k,l;
int a,b,x,y;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%s",s[i]+1);
if(s[1][1]!=s[n][n])
{
puts("0");
return 0;
}
int now=1,last=0;
f[now][0][0]=1;
for(int h=0;h<n;h++)
{
now^=1,last^=1;
memset(f[now],0,sizeof f[now]);
for(i=0;i<=h;i++)
{
j=h-i,a=1+i,b=1+j;
for(k=0;k<=h;k++)
{
l=h-k,x=n-l,y=n-k;
if(s[a+1][b]==s[x-1][y])add(f[now][i+1][ k ],f[last][i][k]);
if(s[a+1][b]==s[x][y-1])add(f[now][i+1][k+1],f[last][i][k]);
if(s[a][b+1]==s[x-1][y])add(f[now][ i ][ k ],f[last][i][k]);
if(s[a][b+1]==s[x][y-1])add(f[now][ i ][k+1],f[last][i][k]);
}
}
}
int ans=0;
for(i=0;i<n;i++)add(ans,f[last][i][i]);
cout<<ans<<endl;
return 0;
}
相關文章
- USACO 1.4 Barn Repair 修理牛棚 (動態規劃)AI動態規劃
- 動態規劃動態規劃
- 動態規劃法動態規劃
- 模板 - 動態規劃動態規劃
- 動態規劃初步動態規劃
- [leetcode] 動態規劃(Ⅰ)LeetCode動態規劃
- 動態規劃(DP)動態規劃
- 動態規劃分析動態規劃
- 演算法系列-動態規劃(1):初識動態規劃演算法動態規劃
- 3.動態規劃動態規劃
- 動態規劃題單動態規劃
- 動態規劃方法論動態規劃
- 動態規劃 總結動態規劃
- 雙序列動態規劃動態規劃
- 動態規劃(Dynamic programming)動態規劃
- 區間動態規劃動態規劃
- 好題——動態規劃動態規劃
- [leetcode 1235] [動態規劃]LeetCode動態規劃
- [atcoder 358] 【動態規劃】動態規劃
- 動態規劃專題動態規劃
- 動態規劃-----線性動態規劃
- 有關動態規劃動態規劃
- 動態規劃初級動態規劃
- 淺談動態規劃動態規劃
- 動態規劃小結動態規劃
- 動態規劃之數的劃分動態規劃
- LeetCode 1326. Minimum Number of Taps to Open to Water a Garden 動態規劃 離散化 貪心LeetCode動態規劃
- 禮物的最大價值(一維動態規劃&二維動態規劃)動態規劃
- 動態規劃(未完成)動態規劃
- 演算法-動態規劃演算法動態規劃
- (C++)DP動態規劃C++動態規劃
- 【CodeChef】Graph Cost(動態規劃)動態規劃
- [動態規劃] 區間 dp動態規劃
- leetcode總結——動態規劃LeetCode動態規劃
- 動態規劃練習題動態規劃
- 大盜阿福(動態規劃)動態規劃
- 動態規劃做題思路動態規劃
- 動態規劃入門篇動態規劃
- 【動態規劃】買賣股票動態規劃