HDU 5617 Jam's maze dp+滚动数组
题目链接:
hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5617
bc(中文): http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=666&pid=1003
题解:
设dp[x1][x2][i]表示第i步时,从(1,1)点走到了(x1,y1),(n,n)点走到了(x2,y2)点的合法的总数。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 6 const int maxn = 505; 7 const int mod = 5201314; 8 9 int dp[maxn][maxn][2]; 10 char str[maxn][maxn]; 11 12 int n; 13 14 void init() { 15 memset(dp, 0, sizeof(dp)); 16 } 17 18 inline int add(int x, int y) { 19 x += y; 20 if (x > mod) x -= mod; 21 return x; 22 } 23 24 int main() { 25 int tc; 26 scanf("%d", &tc); 27 while (tc--) { 28 init(); 29 scanf("%d", &n); 30 for (int i = 1; i <= n; i++) scanf("%s", str[i] + 1); 31 if (str[1][1] == str[n][n]) dp[1][n][0] = 1; 32 //printf("dp[1][n][0]:%d\n", dp[1][n][0]); 33 int u = 1; 34 for (int i = 2; i <= n; i++) { 35 for (int j = 1; j <= i; j++) { 36 for (int k = 1; k <= i; k++) { 37 int x1, y1, x2, y2; 38 x1 = j; y1 = i + 1 - x1; 39 x2 = n + 1 - k; y2 = 2 * n - i + 1 - x2; 40 41 //滚动数组非常需要注意的地方就是!!!每次都要初始化!!!初始化!!!初始化!!! 42 dp[x1][x2][u] = 0; 43 44 //if (i == n&&x1 != x2) continue; 45 46 if (str[x1][y1] == str[x2][y2]) { 47 //printf("fuck!"); 48 int &cur = dp[x1][x2][u]; 49 cur = add(cur, dp[x1][x2][!u]); 50 cur = add(cur, dp[x1][x2 + 1][!u]); 51 cur = add(cur, dp[x1 - 1][x2][!u]); 52 cur = add(cur, dp[x1- 1][x2 + 1][!u]); 53 } 54 } 55 } 56 u = !u; 57 } 58 int ans = 0; 59 for (int i = 1; i <= n; i++) ans = add(ans, dp[i][i][!u]); 60 printf("%d\n", ans); 61 } 62 return 0; 63 }
转载于:https://www.cnblogs.com/fenice/p/5444943.html
HDU 5617 Jam's maze dp+滚动数组相关推荐
- hdu 5617 Jam's maze(双线程dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5617 官方题解: #include<iostream> #include<cstdi ...
- HDU 1176 免费馅饼 矩阵取数, dp + 滚动数组
http://acm.hdu.edu.cn/showproblem.php?pid=1176 首先可以处理出整张地图的状态. book[T][POS]表示第T秒,在第pos个地方有多少个馅饼. dp[ ...
- HDU - 6578 Blank DP + 滚动数组
HDU - 6578 Blank 题意 给你\(\{0,1,2, 3\}\)四个数,分别填入长度为\(n\)的数列中,有\(m\)个限制条件,\(l_{i}, r_{i}, x_{i}\)表示在\([ ...
- Top Secret Task(dp+滚动数组)
传送门: 题目 dp[i][j][k] 表示 考虑到第i个数 计算前j个数的和 进行了k次操作 则有 若不把第i个数放入前j个数中 dp[i][j][k] = dp[i-1][j][k] 若把第i个数 ...
- 【NOIP2015提高组】子串 区间DP+滚动数组优化
题意: 有两个仅包含小写英文字母的字符串 A 和 B. 现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一个新的字符串. 请问 ...
- [QLU Regular Contest 003] G.Youmu with greedy money problem //dp+滚动数组
题目链接 题意: 给一个初始纯度值 m m m,一共度过 n n n天,给出序列 a [ i ] a[i] a[i]和 b [ i ] b[i] b[i],第 i i i天可以执行下列操作方案之一: ...
- 【bzoj 1806/CS 1801】矿工配餐 IOI2007(五维DP+滚动数组)
楼下是传送门: http://www.lydsy.com/JudgeOnline/problem.php?id=1806 Description 现有两个煤矿,每个煤矿都雇用一组矿工.采煤工作很辛苦, ...
- 牛客小白月赛58 B(暴力)C(思维)D(dp滚动数组优化)
牛客小白月赛58 感觉没什么意思,这场月赛出题人有点问题. B 题意:给定一定的数据填充顺序和每一个填充层的名称,只有填充满了上一层才可以填充下一层. 但是每一层又属于某一个大层,一个大层中包含了若干 ...
- 洛谷 P2679 子串 【dp神题】【滚动数组】【2015 noip d2t2】
偷个懒,题解看这里:https://www.luogu.org/problemnew/solution/P2679 看作者 GuessYCB 写的 ===2018.9.6=== 这一次算理解深一点了 ...
最新文章
- 2、RabbitMQ-simplest thing(简单队列)
- Java静态代理、动态代理与CGLib代理
- Boost:path的测试程序
- MySQL日志:binlog、事务日志(redo、undo)
- Synchronized 关键字的用法
- vue如何获取tree当前选中的节点_vue中element-ui 树形控件-树节点的选择(选中当前节点,获取当前id并且获取其父级id)...
- 学习Spring Boot:(三)配置文件
- 学习 | Node.js 之定时任务
- 阮一峰:WebSocket 教程
- Suricata/Snort规则参考
- libcef-详细步骤-将cef浏览器嵌入到Win32中作为子窗口运行
- 投机之殇——解说史上最大CPU漏洞
- TADF的发展史前景概念,热活化延迟荧光(TADF)材料的未来发展
- 转:SWOT分析法与职业生涯规划
- isEmpty与null的区别
- 0x80073712_win101903版本更新错误0x80073712的解决方法 - 系统家园
- 齐二TK6916/20/26/32系列数控落地铣镗床简介1
- topm java cpu3.3_快讯:TOPM 3-0 XQ,TOPM强势压迫,势如破竹喜获三连胜
- 4.3 走出应试的阴影——《逆袭大学》连载
- 60个英文阅读网站推荐
热门文章
- win7 删除Windows服务的方法
- gcc编译选项-Os的用法
- Java 结构体之 JavaStruct 使用教程二 JavaStruct 用例分析
- React开发(240):dva概念5reducer
- React开发(176):导出所有接口供使用
- Taro+react开发(10)--多行选择
- [css] 要是position跟display、overflow、float这些特性相互叠加后会怎么样?
- [css] 写出div在不固定高度的情况下水平垂直居中的方法?
- [css] 请问触发hasLayout的后果是什么?
- 工作286:v-model没有值会报错