NYOJ 61 传纸条
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 传纸条相关推荐
- nyoj 61 传纸条(一)双线程DP
传纸条(一) 时间限制: 2000 ms | 内存限制: 65535 KB 难度: 5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m ...
- nyoj 61 传纸条(一) (双线动归)nyoj 探寻宝藏
传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列 ...
- NYOJ 61 传纸条(一)
传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列 ...
- NYOJ 61:传纸条(一)(三维DP)
传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列 ...
- NOIP2008传纸条[DP]
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- 洛谷1006 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- 洛谷P1006 传纸条(多维DP)
小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们 ...
- SDNU 1194.传纸条(DP) 1032.机器人
Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交 ...
- 传纸条(洛谷-P1006)
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个 m 行 n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了. ...
最新文章
- P1505 [国家集训队]旅游 树链剖分
- t-top 命令详解
- win7为什么没有计算机,教你win7如何快速找出电脑没声音问题所在-win7之家
- logistic回归--好文
- 带有静态方法的类(java中的math类)
- 深度学习基础1(神经网络)
- 事务模型与分布式事务总结思考
- Canvas之进度条的制作(矩形,圆环)
- MySQL运行一段时间后自动停止问题的排查
- android 调试好事工具类,Android 工具类之总结 Hua
- 构建 Vue.js 2.0项目
- 如何测网络稳定性_讲座|复杂网络上的非线性动力学:网络结构如何决定系统稳定性?...
- 下了高铁直接上地铁,多方便
- mysql备份工具命令xtra_mysql xtrabackup备份工具使用
- CF probabilities 自制题单
- 免费又好用的Windows任务栏透明化工具——Translucent TB
- Unity判断物体相对位置
- 单链表创建学生成绩表 输出学生姓名成绩及班级平均分
- 数学基础科目经典教材
- dpdk中文-DPDK学习路线图