【题解】洛谷P1006传纸条
链接
https://www.luogu.org/problemnew/show/P1006
日常牢骚
过年前最后一节课上完了坐标DP 也接触了一点区间DP(noi1995石子合并)下次做做看看吧
老师布置了好多道DP这让我这个刚刚学的蒟蒻可咋办呀
想die的心
正题
不扯淡了赶紧扯回来
首先看到这题我想到了另外一题很相似的叫啥我忘了......
反正也是双向DP(姑且这么叫吧)
看到题解里有dalao们弄成三维的 二维的 甚至是一维的
我只想说
对大佬%%%%%%%%
本蒟蒻的做法十分质朴淡雅清新脱俗
因为题目的数据挺小只有50
所以自然而然用到了四维......
思路
- 既然是从头尾各走一遍且不重复 那么我们可以看成从头走两遍不重复的求最大的好感度
- 于是我们设(x1,y1)为第一次的坐标 (x2,y2)为第二次的坐标 得出f[x1][y1][x2][y2]为好感度总和
- 那么只有四种方法可以到每一个格子 (一上,二上)(一上,二左)(一左,二上)(一左,二左)
- 最后从后面遍历到头就出答案 答案在f[2][1][1][2]中(因为不重复所以只可能一个在下面一个在左边)
代码
#include<iostream>
using namespace std;
int f[51][51][51][51],a[51][51];
int n,m;
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int x1=m;x1>=1;x1--)//从后面开始遍历回去
for(int y1=n;y1>=1;y1--)
for(int x2=m;x2>=1;x2--)
for(int y2=n;y2>=1;y2--)
{
if((x1>1&&x2>1)&&((x1-1!=x2-1)||(y1!=y2)))
f[x1-1][y1][x2-1][y2]=max(f[x1][y1][x2][y2]+a[x1-1][y1]+a[x2-1][y2],f[x1-1][y1][x2-1][y2]);
if((x1>1&&y2>1)&&((x1-1!=x2)||(y1!=y2-1)))
f[x1-1][y1][x2][y2-1]=max(f[x1][y1][x2][y2]+a[x1-1][y1]+a[x2][y2-1],f[x1-1][y1][x2][y2-1]);
if((y1>1&&x2>1)&&((x1!=x2-1)||(y1-1!=y2)))
f[x1][y1-1][x2-1][y2]=max(f[x1][y1][x2][y2]+a[x1][y1-1]+a[x2-1][y2],f[x1][y1-1][x2-1][y2]);
if((y1>1&&y2>1)&&((x1!=x2)||(y1-1!=y2-1)))
f[x1][y1-1][x2][y2-1]=max(f[x1][y1][x2][y2]+a[x1][y1-1]+a[x2][y2-1],f[x1][y1-1][x2][y2-1]);
}
cout<<f[2][1][1][2];//答案
}
【题解】洛谷P1006传纸条的更多相关文章
- 洛谷 P1006 传纸条 题解
P1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法 ...
- 棋盘DP三连——洛谷 P1004 方格取数 &&洛谷 P1006 传纸条 &&Codevs 2853 方格游戏
P1004 方格取数 题目描述 设有N $\times N$N×N的方格图(N $\le 9$)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A ...
- 洛谷 P1006 传纸条 多维DP
传纸条详解: 蒟蒻最近接到了练习DP的通知,于是跑来试炼场看看:发现有点难(毕竟是蒟蒻吗)便去翻了翻题解,可怎么都看不懂.为什么呢?蒟蒻发现题解里都非常详细的讲了转移方程,讲了降维优化,但这题新颖之处 ...
- 洛谷p1006 传纸条 三维解法
原题目如下 原地址https://www.luogu.com.cn/problem/P1006 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做 ...
- [NOIP2008] 提高组 洛谷P1006 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- 【动态规划】洛谷P1006传纸条
题目描述: 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的 ...
- Codevs 1169 == 洛谷 P1006 传纸条
---恢复内容开始--- 1169 传纸条 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小渊和小轩是好朋友也是同班同学,他 ...
- 洛谷 P1006 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- 洛谷P1006 传纸条 (棋盘dp)
好气,在洛谷上交就过了,在caioj上交就只有40分 之前在51nod做过这道题了. https://blog.csdn.net/qq_34416123/article/details/8180902 ...
- 洛谷P1006 传纸条(多维DP)
小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们 ...
随机推荐
- python实现excel转json的例子
python实现excel转json的例子(改进版) 由于数值策划给出数值是excel表格,但前台flash程序用的又是json格式.服务器也用了json格式,而json又是utf-8编码的,用C++ ...
- Programmer Competency Matrix--ref--http://sijinjoseph.com/programmer-competency-matrix/
Note that the knowledge for each level is cumulative; being atlevel n implies that you also know eve ...
- C# 面试题二
1. 请编程实现一个冒泡排序算法? int [] array = new int [*] ; ; ; i < array.Length - ; i++) { ; j < ar ...
- JS常用的设计模式(5)——代理模式
代理模式的定义是把对一个对象的访问, 交给另一个代理对象来操作. 举一个例子, 我在追一个MM想给她送一束花,但是我因为我性格比较腼腆,所以我托付了MM的一个好朋友来送. 这个例子不是非常好, 至少我 ...
- Java根据byte数组,生成文件
原文出自:https://blog.csdn.net/seesun2012 根据byte数组,生成文件 自己写的小案例,找个地方记录一下 package com.seesun2012.utils; i ...
- spark scala 例子
object ScalaApp { def main(args: Array[String]): Unit = { var conf = new SparkConf() conf.setMaster( ...
- javascript学习:闭包和prototype原型使用基础
闭包 function Person(name) { this.Username = name; var Userage = 18; //通过这种方法可以模拟私有成员 //类似于private成员 t ...
- 重构指南 - 尽快返回(Return ASAP )
尽快返回就是如果方法中的条件判断可以得到结果,则尽快返回该结果. 1. 检查条件,如果不满足就立即返回,不执行下面的逻辑. 2. 当包含大量的if else嵌套,代码可读性变差,也容易出现异常. 3. ...
- boost库的配置——Linux篇
Boost库分为两个部分来使用,一是直接使用对应的头文件,二是需要编译安装相应的库才可以使用. 下面是boost在Linux上安装和使用过程(整个boost库全部安装): (1)在www.boost. ...
- 04_Redis数据类型(set、zset)
[set:集合类型(高中的集合知识)] 集合类型:无序.不可重复 列表类型:有序.可重复 [set类型] 1.添加元素 语法:sadd key member1 member2...... 返回值:返回 ...