2014省赛大总结(三) 双线DP
来源:互联网 发布:软件开发热门发展方向 编辑:程序博客网 时间:2024/05/17 07:44
/* http://acm.nyist.net/JudgeOnline/problem.php?pid=61 传纸条 http://acm.nyist.net/JudgeOnline/problem.php?pid=712 探 寻 宝 藏 题意:给一个矩阵,求两条不相交的线从左上角到右下角经过的元素的最大和 双线dp - 即同时考虑两条不相交的线,使其线上的和最大 显然我们需要记录每一步时两个线同时往前走的位置(这样可以容易的控制其不相交). 状态:dp[k,(x1,y1),(x2,y2)] 在第k步,双线里一线在(x1,y1) 二线在(x2,y2) 的最大和 转移:dp[k,(x1,y1),(x2,y2)] = max(dp[k-1,(x1-1,y1),(x2-1,y2)], dp[k-1,(x1,y1-1),(x2-1,y2)], dp[k-1,(x1-1,y1),(x2,y2-1)], dp[k-1,(x1,y1-1),(x2,y2-1)]) + map[x1][y1] + map[x2][y2];*/ #include<iostream>#include<cstring>using namespace std;#define N 55int map[N][N],dp[2*N][N][N];int judge(int s, int i, int j,int n){ if(i == j) return 0; if (s-i < 1 || s-i > n || s- j< 1 || s-j > n) return 0; return 1;}int main(){ int k; cin>>k; while(k--) { memset(dp, 0, sizeof(dp)); int m,n; cin>>m>>n; for(int i = 1; i <= m; i++) for(int j = 1; j <= n; j++) cin>>map[i][j]; dp[2][1][1] = map[1][1]; for(int s = 3; s < m + n; s++) for(int i = 1; i <= m; i++) for(int j = 1; j <= m; j++) { if(judge(s,i,j,n)) { int max1 = max(dp[s-1][i-1][j], dp[s-1][i-1][j-1]); int max2 = max(dp[s-1][i][j-1], dp[s-1][i][j]); dp[s][i][j] = max(max1, max2) + map[i][s-i] + map[j][s-j]; } } int ret = max(dp[m+n-1][m-1][m], dp[m+n-1][m][m-1])+map[m][n]; cout<<ret<<endl; } return 0;}
0 0
- 2014省赛大总结(三) 双线DP
- hdu 2686 Matrix(双线程DP)
- 蓝桥杯 - 传纸条 (双线程DP)
- nyoj 61(双线程dp)
- HDU 2686 Matrix(双线程DP)
- lightoj 1071 - Baker Vai(双线DP)
- NYOJ61 传纸条(一)(双线dp)
- 线性插值(双线性)(三线性)
- 双线策略路由的三种实现方式总结
- 省赛 双线程dp
- 双线程dp
- DP三句话总结
- 专题三总结,DP
- Nyoj-61 传纸条(一)(双线dp)
- NYOJ 61 传纸条(一)(双线dp)
- nyoj61 传纸条(一) (双线dp)
- nyist 61 传纸条(一)(双线程DP)
- nyoj 61 传纸条(一)(双线DP)
- 规格化浮点数
- zstack学习7--PAN ID与 Extended PAN ID之间的区别--不理解未验证
- Output Post Processor (OPP)
- linux根目录下各目录的功能
- 【Java】浅析虚拟机结构与机制
- 2014省赛大总结(三) 双线DP
- 新手必备:Linux系统VPS主机SSH常用命令大全
- OCP-1Z0-051 第110题 AVG的使用
- js基础需要注意的点
- 递归输出字符串 经典中的经典
- 分块_莫队算法
- UVA 10025(数学)
- Android 布局Layout详解
- c++ error initialization of "xxx" is skipped by case label