洛谷OJ: P1006 传纸条

9人阅读 评论(0) 收藏 举报
分类:

思路:开始看到这题的时候无从下手,于是就在纸上试着画出路线,看看有没有什么规律,画着画着发现在画完路线的图上每一条从右上到左下的斜线都只用到了两个同学,并且在斜线上一条线路永远在另一条线路的右上方,因为做n皇后问题的时候有利用过这种斜线,于是就想以这个作为突破口写出状态转移方程,思考了有一个小时吧...最后才得到了状态转移方程

首先我们定义dp[k][i][j]的意义为横纵坐标为k的斜线上, 在下面的线路横坐标为i, 在上面的线路的横坐标为j, 所以i < j恒成立, 那么应该如何递推呢?通过画图枚举我得到了四种方式


即 1.下下2.右右3.下右4.右下 这四种转移形式

那么我们便可以得到转移方程

dp[k][i][j] = max{dp[k-1][i][j], dp[k-1][i-1][j-1], dp[k-1][i][j-1], dp[k-1][i-1][j]} + maps[i][j]

DP还是难啊!!!!!!

/**
 *	题目: 洛谷OJ P1006 传纸条
 *	题型: DP
 **/
#include <cstdio>
#include <iostream>
using namespace std;

const int maxn = 100+10;
int dp[maxn<<1][maxn][maxn], maps[maxn][maxn], n, m, ans;

int main()  {
	ios::sync_with_stdio(false);
	/************input**************/
	cin >> n >> m;
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			cin >> maps[i][j];
		}
	}
	/*******************************/
	for(int k = 2; k <= n+m-1; k++) {
		for(int i = 1; i <= k-1; i++) {
			for(int j = i+1; j <= k-1; j++) { //因为在同一条斜线上横坐标不可能相同, 所以j从i+1开始 
				dp[k][i][j] = max(dp[k-1][i][j], max(dp[k-1][i-1][j-1],dp[k-1][i-1][j])) + maps[i][k-i] + maps[j][k-j];
			}
		}
	}
	cout << dp[n+m-1][n-1][n] << endl;
	return 0;
}

查看评论

洛谷P1006 传纸条

这是一道四维DP题,注意数组要开得恰好,不然会爆内存。(维数越高,每一维上的数字大1的空间代价就越大) 因为有限制条件每个数只能访问一次,所以要判断两个人是否走到了同一个格,以及他们上一步是否在同一...
  • ocean_62
  • ocean_62
  • 2016-10-23 18:13:05
  • 348

洛谷p1006传纸条

原题 不能每次选最大的走(贪心),因为有可能小的后面接大的,比如 0   1   99 12 10 1 由于只能想两个方向走,所以到达结果的步数是固定的(长+宽-1) 但是用步数不能表达状态...
  • Tekim
  • Tekim
  • 2017-08-28 14:08:48
  • 117

【洛谷P1006】传纸条

一道简单的DP
  • zhaoyh2000
  • zhaoyh2000
  • 2016-12-15 07:23:10
  • 209

【洛谷P1006】 传纸条

多进程DP
  • sdfzchy
  • sdfzchy
  • 2017-05-03 13:58:51
  • 151

洛谷p1006 传纸条

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

洛谷 P1006 传纸条

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

洛谷P1006 传纸条

双线程dp,一来一回可以看作两个人从同一个起点走到同一个终点#include #include #define f(_x,_y) for(_x=1;_x...
  • Myriad_Dreamin
  • Myriad_Dreamin
  • 2018-01-04 18:17:08
  • 22

南阳理工OJ_题目61 传纸条(一)

#include #include using namespace std; int dp(); int a[55][55]; int d[110][55][55]; int m; int ...
  • u010204038
  • u010204038
  • 2014-05-08 22:06:25
  • 473

南阳理工学院oj上的传纸条

很明显的动态规划方法,可以开三个数组,一个存放好感度,一个存放动态规划迭代的该店的最大好感度,一个布尔型二维数组,标记是否走过,并设置一个布尔量标记是否到达了右下角如到达即坐上遍历,保证右下和左上过程...
  • Wolf_South
  • Wolf_South
  • 2017-11-22 20:37:09
  • 81

[2615]传纸条 sdutOJ

 传纸条 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 传纸条是一种在课堂上...
  • jiangyongy
  • jiangyongy
  • 2014-08-11 10:51:15
  • 396
    个人资料
    持之以恒
    等级:
    访问量: 734
    积分: 510
    排名: 10万+
    文章存档