51 nod 猪和回文
来源:互联网 发布:淘宝直通车图是什么 编辑:程序博客网 时间:2024/06/06 13:58
遍历从i,j到x,y,i和j代表从中间出发到0 0,x,y是从中间出发到n,m,如果遍历的话是n^4,y可以用x算出来,所以遍历n^3就够了,但是数组开不下,用滚动数组。3维循环,
#include<bits\stdc++.h>using namespace std;typedef long long ll;#define pb push_backconst int mod=1e9+7;int n,m;int dp[2][505][505];char s[505][505];void add(int &a,int b){ a+=b; if(a>=mod)a-=mod;}int main(){scanf("%d%d%*c",&n,&m);for(int i=0;i<n;i++) scanf("%s",s[i]); memset(dp,0,sizeof(dp)); for(int i=n-1;i>=0;i--) for(int j=m-1;j>=0;j--) for(int x=i;x<n;x++) { int y=n+m-2-x-i-j; if(y<0)break; int ii=i&1; int &tmp=dp[ii][j][x]; if(s[i][j]!=s[x][y]) { tmp=0; continue; } if(i>x||j>y) { tmp=0; } else if(x+y-i-j<=1)tmp=1; else { tmp=0; if (i < n - 1) add(tmp, dp[!ii][j][x]); if (i < n - 1 && x) add(tmp, dp[!ii][j][x - 1]); if (j < m - 1) add(tmp, dp[ii][j + 1][x]); if (j < m - 1 && x) add(tmp, dp[ii][j + 1][x - 1]); } } printf("%d\n", dp[0][0][n - 1]); return 0;}
阅读全文
0 0
- 51 nod 猪和回文
- 51Nod-1503-猪和回文
- 51NOD 1503 猪和回文
- 51nod 1503 猪和回文
- 51nod 1503 猪和回文(dp)
- [51nod 1503]猪和回文
- 51nod 1503 猪和回文【DP】
- 51nod 1503 猪和回文(双线DP)
- 51 nod 1503 猪和回文(双线程DP)
- 51nod 1503 猪和回文 (dp + 优化好题)
- 【51nod】1092 回文字符串
- 1092 回文字符串(51nod)
- 51 nod 1092 回文字符串
- 51nod 1092 回文字符串
- 51nod 1092 回文字符串
- 51Nod-1464-半回文
- 51Nod-1523-非回文
- 51NOD 1523 非回文
- sizeof的使用
- PHP 查找算法
- JavaScript基础
- StartUML2.8版本破解
- linux设备插拔
- 51 nod 猪和回文
- 关于{1,2,...,n}的子集和的一个有趣结论
- leetcode 154. Find Minimum in Rotated Sorted Array II
- 造新世界---背包
- gitlab 多人协同工作
- 微生物增值
- nginx简单使用
- php面试题之二——数据结构和算法(高级部分)
- 浅谈C#中堆和栈的区别(附上图解)