Acwing-275-传纸条(DP)
链接:
https://www.acwing.com/problem/content/description/277/
题意:
给定一个 N*M 的矩阵A,每个格子中有一个整数。
现在需要找到两条从左上角 (1,1) 到右下角 (N,M) 的路径,路径上的每一步只能向右或向下走。
路径经过的格子中的数会被取走,两条路径可以经过同一个格子,但格子中的数 只能被取一次。
求取得的数之和最大是多少。
思路:
三角形Dp的加强版,可以枚举走的步长,和两个点的x坐标,y坐标可以推出来.
然后四种情况转移一下.
代码:
#include <bits/stdc++.h>
using namespace std;
int Map[60][60];
int Dp[200][60][60];
int n, m;
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1;i <= n;i++)
{
for (int j = 1;j <= m;j++)
scanf("%d", &Map[i][j]);
}
Dp[0][1][1] = Map[1][1];
for (int len = 1;len <= n+m-2;len++)
{
for (int x1 = 1;x1 <= n;x1++)
{
int y1 = len-x1+2;
if (y1 < 1 || y1 > m)
continue;
for (int x2 = 1;x2 <= n;x2++)
{
int y2 = len-x2+2;
if (y2 < 1 || y2 > m)
continue;
if (x1 == x2)
{
Dp[len][x1][x2] = max(Dp[len][x1][x1], Dp[len-1][x1][x2]+Map[x1][y1]);
Dp[len][x1][x2] = max(Dp[len][x1][x1], Dp[len-1][x1-1][x2]+Map[x1][y1]);
Dp[len][x1][x2] = max(Dp[len][x1][x1], Dp[len-1][x1][x2-1]+Map[x1][y1]);
Dp[len][x1][x2] = max(Dp[len][x1][x1], Dp[len-1][x1-1][x2-1]+Map[x1][y1]);
}
else
{
Dp[len][x1][x2] = max(Dp[len][x1][x2], Dp[len-1][x1][x2]+Map[x1][y1]+Map[x2][y2]);
Dp[len][x1][x2] = max(Dp[len][x1][x2], Dp[len-1][x1-1][x2]+Map[x1][y1]+Map[x2][y2]);
Dp[len][x1][x2] = max(Dp[len][x1][x2], Dp[len-1][x1][x2-1]+Map[x1][y1]+Map[x2][y2]);
Dp[len][x1][x2] = max(Dp[len][x1][x2], Dp[len-1][x1-1][x2-1]+Map[x1][y1]+Map[x2][y2]);
}
}
}
}
printf("%d\n", Dp[n+m-2][n][n]);
return 0;
}
Acwing-275-传纸条(DP)的更多相关文章
- AcWing 275. 传纸条
#include<iostream> using namespace std ; ; *N][N][N]; int w[N][N]; int n,m; int main() { cin&g ...
- NOIP2008传纸条[DP]
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- CodeVS1169 传纸条 [DP补完计划]
题目传送门 题目描述 Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端, ...
- P1011 传纸条//dp优化改进状态表示
P1011 传纸条 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不 ...
- P1006 传纸条 /// DP+滚动数组
题目大意: https://www.luogu.org/problemnew/show/P1006 题解 不难想到 求从起点到终点的两条不同的路 因为只能向右或向下走 所以纸条1和2不可能同时位于同一 ...
- tyvj1011 - 传纸条 ——DP
题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1011 状态转移方程: f[k,x1,x2] = max(f[k-1,x1,x2],f[k-1,x1-1, ...
- TYVJ 1011 NOIP 2008&&NOIP 2000 传纸条&&方格取数 Label:多线程dp
做题记录:2016-08-15 15:47:07 背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...
- 传纸条(一)(双线程dp)
传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...
- nyoj61 传纸条(一) dp
思路:两人一个从左上角出发只能向右和向下,另一人从右下角出发只能向左和向上,可以看做两人都是从右下角出发,且只能向左和向上传纸条,并且两条路径不会相交,因为一个人只会传一次,那么随便画一个图就能知道两 ...
- P1006 传纸条 (方格取数dp)
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运 ...
随机推荐
- 【VS开发】【DSP开发】地址对齐
组成原理说明------地址对齐 1.引入 1.1如下面的代码,定义了三个变量,int,char,int,并输出他们的十六进制的内存地址. #include<stdio.h> int ma ...
- 动态赋予java类的属性set与get值
public class Contact { private String name; private String tel; private attrControl attrC=new attrCo ...
- Kafka的知识总结
前言 转自(https://www.cnblogs.com/zhuifeng523/p/12081204.html) Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partit ...
- 常见网络摄像机的端口及RTSP地址
海康威视默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设端口:“HTTP 端口”(默认为 80).“RTSP 端口”(默认为 554).“HTTPS 端 口”(默认 44 ...
- hashMap怎样解决hash冲突
通过链表的方式处理: java1.7是单向链表 jvav1.8在数量小于8时是单向链表,大于8就是红黑树,查找方式遍历判断 解决冲突的方式很多,例如再hash,再散列(开放地址法,探测再散列)
- # [爬虫Demo] pyquery+csv爬取猫眼电影top100
目录 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 代码君 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 https://maoyan.co ...
- FFmpeg4.0笔记:封装ffmpeg的解码功能类CDecode
Github https://github.com/gongluck/FFmpeg4.0-study/tree/master/Cff CDecode.h /********************** ...
- 02:linux常用命令
1.1 linux查看系统基本参数常用命令 1.查看磁盘 [root@linux-node1 ~]# df -hl Filesystem Size Used Avail Use% Mounted on ...
- C# 面向对象6 之前的复习
复习练习 THIS:调用当前类的构造函数
- js动态添加行和列(table)
function AddTableRow() { var Table = document.getElementById("NewTable"); //取得自定义的表对象 NewR ...