http://acm.nyist.net/JudgeOnline/problem.php?pid=61

四维的DP ,但是用四维,肯定会超时。

从图中我们可以看到,在K 时刻,A 位于(i,ii ),B 位于(j,jj),那么在K -1 时刻 A 有两种状态,A 1  和A 2 ,B 有两种状态 B 1 和B 2  ,两两组合就有四种状态,所以K 时刻的最优解可由K -1 时刻四种状态的最优解加上,A  和  B 的值取得。

动态转移方程为:

dp[i][ii][j][jj] = max( dp[i][ii-1][j][jj-1] , dp[i][ii-1][j-1][jj] , dp[i-1][ii][j][jj-1] , dp[i-1][ii][j-1][jj] ) + map[i][ii] + map[j][jj];

所以我们可以直接枚举四个变量。但是要注意  A  和 B 点不能再同一点上。

但是无疑这种方法是超时的。四维的dp 数据量太大了

#include <stdio.h>
#include <string.h>
int dp[53][53][53][53];
int map[53][53];
int max(int a,int b)
{return a>b? a:b;
}int main()
{int T,row,col,i,j,ii,jj,k,t1,t2,ans;scanf("%d",&T);do{scanf("%d%d",&row,&col);          for(i = 1 ; i <= row ; ++i)          for(j = 1 ; j <= col ; ++j)scanf("%d",&map[i][j]);   for(i = 1 ; i <=row ; ++i)for(j = 1 ; j <= row ; ++j)for(ii = 1 ; ii <= col ; ++ii) for(jj = 1 ; jj <= col ; ++jj)if(i != j || ii != jj){t1 = max(dp[i][ii-1][j][jj-1],dp[i][ii-1][j-1][jj]);     t2 = max(dp[i-1][ii][j][jj-1],dp[i-1][ii][j-1][jj]);  dp[i][ii][j][jj] = max(t1,t2) + map[i][ii] + map[j][jj];}      ans = max(dp[row][col-1][row-1][col],dp[row-1][col][row][col-1]);       printf("%d\n",ans);       }while(--T);// system("pause");return 0;
}

i + ii - 1  明显是等于  i - 1 + ii 的,所以,我们标记一个点的时候只要一个步数和一个横坐标就行了。这样就把四维的降到了三位。


#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[110][110][110];
int map[55][55];
int main()
{int N,n,m,i,j,ii,jj,k,s,t,all;cin>>N;while(N--){memset(dp,0,sizeof(dp));memset(map,0,sizeof(map));cin>>m>>n;for(i = 1; i <= m; i++)for(j = 1; j <= n; j++){cin>>map[i][j];}all = m+n;for(k = 2; k <= all; k++)for(i = 1; i <= m; i++)for(j = 1; j <= m; j++){if(i != j && i <= k && j <=k){s = max(dp[k-1][i-1][j],dp[k-1][i-1][j-1]);t = max(dp[k-1][i][j],dp[k-1][i][j-1]);dp[k][i][j] = max(s,t) + map[i][k-i] + map[j][k-j];}}int ans = max(dp[all-1][m][m-1] , dp[all-1][m-1][m]);cout<<ans<<endl;}return 0;
}

还有一题与之非常相似。

http://ayit.acmclub.com/index.php?app=problem_title&id=233&problem_id=21491

知识A 点 和B 点能到达同一点。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[110][110][110],map[55][55];int main()
{int n,m,s,t,i,j,k;cin>>m>>n;for(i = 1; i <= m; i++)for(j = 1; j <= n; j++)cin>>map[i][j];int all = m+ n;for(k = 2; k <= all; k++)for(i = 1; i <= m; i++)for(j = 1; j <= m; j++)if(i != j && i <= k && j <= k){s = max(dp[k-1][i][j-1],dp[k-1][i-1][j]);t = max(dp[k-1][i][j],dp[k-1][i-1][j-1]);dp[k][i][j] = max(s,t) + map[i][k-i] + map[j][k-j];}int ans = max(dp[all-1][m][m-1],dp[all-1][m-1][m]);cout<<ans<<endl;return 0;
}

NYOJ 61 传纸条相关推荐

  1. nyoj 61 传纸条(一)双线程DP

    传纸条(一) 时间限制: 2000 ms  |  内存限制: 65535 KB 难度: 5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m ...

  2. nyoj 61 传纸条(一) (双线动归)nyoj 探寻宝藏

    传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列 ...

  3. NYOJ 61 传纸条(一)

    传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列 ...

  4. NYOJ 61:传纸条(一)(三维DP)

    传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列 ...

  5. NOIP2008传纸条[DP]

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...

  6. 洛谷1006 传纸条

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...

  7. 洛谷P1006 传纸条(多维DP)

    小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们 ...

  8. SDNU 1194.传纸条(DP) 1032.机器人

    Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交 ...

  9. 传纸条(洛谷-P1006)

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个 m 行 n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了. ...

最新文章

  1. P1505 [国家集训队]旅游 树链剖分
  2. t-top 命令详解
  3. win7为什么没有计算机,教你win7如何快速找出电脑没声音问题所在-win7之家
  4. logistic回归--好文
  5. 带有静态方法的类(java中的math类)
  6. 深度学习基础1(神经网络)
  7. 事务模型与分布式事务总结思考
  8. Canvas之进度条的制作(矩形,圆环)
  9. MySQL运行一段时间后自动停止问题的排查
  10. android 调试好事工具类,Android 工具类之总结 Hua
  11. 构建 Vue.js 2.0项目
  12. 如何测网络稳定性_讲座|复杂网络上的非线性动力学:网络结构如何决定系统稳定性?...
  13. 下了高铁直接上地铁,多方便
  14. mysql备份工具命令xtra_mysql xtrabackup备份工具使用
  15. CF probabilities 自制题单
  16. 免费又好用的Windows任务栏透明化工具——Translucent TB
  17. Unity判断物体相对位置
  18. 单链表创建学生成绩表 输出学生姓名成绩及班级平均分
  19. 数学基础科目经典教材
  20. dpdk中文-DPDK学习路线图

热门文章

  1. 后台网站首页制作设计思路
  2. xp计算机锁定界面,各种系统中锁定桌面的方法
  3. [android] 手机卫士设备管理权限锁屏
  4. mysql数据库层级关系图_层次关系数据库表的设计
  5. iOS-CoCoaPods最新安装
  6. Unity3D-黑魂复刻学习-(1)玩家输入模块
  7. mysql的cell_这篇发生Cell的数据库到底特殊在哪里?
  8. java dfa_JAVA 实现DFA算法
  9. 不会数学统计没关系——5分钟教你轻松掌握箱线图 | 图表家族#24
  10. 性能杀手之异常霸气外露!找死!