博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NYOJ61 传纸条(一) 双线程dp
阅读量:6292 次
发布时间:2019-06-22

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

题意:

从左上向右下传纸条,再传回来,经过不同的路径

中间每个人都有一个好心程度

问最大的好心程度

思路:

去了再回来就等于直接走两遍不同的路径

三维dp

第一维记走了多少步

第二维记第一条路径的纵坐标

第三维记第二条路径的纵坐标

优化了一下32ms过掉

/* ***********************************************Author        :devilCreated Time  :2016/5/25 15:49:13************************************************ */#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int N=51;int dp[N<<1][N][N],mp[N][N];int main(){ //freopen("in.txt","r",stdin); int t,n,m,y1,y2; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&mp[i][j]); dp[3][1][2]=0; for(int l=3;l<=n+m;l++) { for(int i=1;i
m) continue; for(int j=i+1;j<=n;j++) { y2=l-j; if(y2<=0) break; else if(y2>m) continue; dp[l][i][j]=mp[i][y1]+mp[j][y2]+max(dp[l-1][i][j],max(dp[l-1][i-1][j],max(dp[l-1][i][j-1],dp[l-1][i-1][j-1]))); } } } printf("%d\n",max(dp[n+m-1][n][n],max(dp[n+m-1][n-1][n],max(dp[n+m-1][n][n-1],dp[n+m-1][n-1][n-1])))); } return 0;}

 

转载于:https://www.cnblogs.com/d-e-v-i-l/p/5527278.html

你可能感兴趣的文章
关于FreeBSD的CVSROOT的配置
查看>>
基于RBAC权限管理
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
Vue------第二天(计算属性、侦听器、绑定Class、绑定Style)
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>
PHP 7.1是否支持操作符重载?
查看>>
Vue.js 中v-for和v-if一起使用,来判断select中的option为选中项
查看>>
Java中AES加密解密以及签名校验
查看>>
定义内部类 继承 AsyncTask 来实现异步网络请求
查看>>
VC中怎么读取.txt文件
查看>>