hdu 5617 Jam's maze(双线程dp)
生活随笔
收集整理的這篇文章主要介紹了
hdu 5617 Jam's maze(双线程dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=5617
官方題解:
#include<iostream> #include<cstdio> #include<cstring> using namespace std;const int inf = 0x3f3f3f3f; const int mod = 5201314; int n,dp[2][505][505]; char Map[505][505];void add(int &x,int y) {x += y;if(x >= mod) x -= mod; }int main() {int t;scanf("%d",&t);while(t--){scanf("%d",&n);for(int i = 1;i <= n;i++)scanf("%s",Map[i]+1);int p = 0;memset(dp[p],0,sizeof(dp[p]));dp[p][1][n] = Map[1][1] == Map[n][n];for(int i=1;i<n;i++){memset(dp[!p],0,sizeof(dp[!p]));for(int x1 = 1;x1 <= i + 1; x1++){for(int x2 = n; x2 >= n - i; x2--){int y1 = i + 2 - x1;int y2 = 2 * n - i - x2;if(Map[x1][y1] != Map[x2][y2]) continue;add(dp[!p][x1][x2],dp[p][x1][x2]);add(dp[!p][x1][x2],dp[p][x1][x2+1]);add(dp[!p][x1][x2],dp[p][x1-1][x2+1]);add(dp[!p][x1][x2],dp[p][x1-1][x2]);}}p ^= 1;}int ans = 0;for(int i = 1; i <= n; i++)add(ans,dp[p][i][i]);printf("%d\n",ans);}return 0; }總結
以上是生活随笔為你收集整理的hdu 5617 Jam's maze(双线程dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JEasyPoi 2.1.4 (Jeec
- 下一篇: 自适应移动设备页面的设计