博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nyoj 61: 传纸条(一)
阅读量:6587 次
发布时间:2019-06-24

本文共 1108 字,大约阅读时间需要 3 分钟。

使用双线dp,假设两个人同时从左上角移动到右下角,且满足路线不交叉,另k=x1+y1=x2+y2压缩状态进行优化。每次状态转移满足 x1,x2,y1,y2都在矩阵范围内,且(x2,y2)在相对于(x1,y1)右上方的位置。大致如下图。

#include
using namespace std;int n,m;int dp[105][55][55];int mp[55][55];int Max(int a,int b,int c,int d){ int t1=max(a,b); int t2=max(c,d); return max(t1,t2);}int main(){ int T; cin>>T; while(T--) { cin>>m>>n; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) cin>>mp[i][j]; memset(dp,0,sizeof(dp)); dp[2][1][1]=0; for(int k=2;k<=m+n;k++) for(int x1=1;x1<=n;x1++) for(int x2=x1+1;x2<=n;x2++) { int y1=k-x1,y2=k-x2; if(y1<1 || y2<1 || y1>m || y2>m || y1==y2) continue; dp[k][x1][x2]=Max(dp[k-1][x1][x2],dp[k-1][x1-1][x2], dp[k-1][x1][x2-1],dp[k-1][x1-1][x2-1]) +mp[y1][x1]+mp[y2][x2]; } printf("%d\n",dp[n+m-1][n-1][n]); }}

 

转载于:https://www.cnblogs.com/Just--Do--It/p/7206185.html

你可能感兴趣的文章
maven 添加阿里云maven镜像
查看>>
对向量、矩阵求导
查看>>
各版本linux下载地址大全
查看>>
CentOS 6.X 关闭不需要的 TTY 方法
查看>>
编程能力的四种境界
查看>>
在windows上秒开应用程序
查看>>
mysql主从复制实现数据库同步
查看>>
面试-1
查看>>
【框架学习】ibatis DAO框架分析
查看>>
ZOJ 3640 Help Me Escape
查看>>
删除windows中的库、家庭组、收藏夹
查看>>
war 宽度变窄
查看>>
set p4 environment in windows
查看>>
自定义指令的参数
查看>>
python实现进度条
查看>>
Android 一个应用启动另一个应用的说明
查看>>
Setting up the Web Admin Tool in LDAP 6.x to communicate via SSL
查看>>
SQL好习惯:编写支持可搜索的SQL
查看>>
Shadowbox
查看>>
【 程 序 员 】:伤不起的三十岁,你还有多远 ?
查看>>