「 CODE[VS] P2853 」 方格游戏
题目大意
给定一张 $n\times n$ 的网格。每个格子上都有一个系数 $a$,先下 $A$ 和 $B$ 两人选择两条 $(1,1)\rightarrow (n,n)$ 路径。要求着两条路径不能相同。并且要计算出两条路径每一个相对应的格子上的系数的差的绝对值之和。
要求选择路径是满足下列条件:
只能选择坐标增加的方向。
解题思路
棋盘 DP。
既然是在一个棋盘中。并且已经规定了行走的方向。所以在移动的格子的数量相同时。两个路径停留的点到 $(1,1)$ 这个点的曼哈顿距离(横坐标$+$纵坐标)是相同的。而且知道了横坐标和曼哈顿距离就可以求出点的纵坐标。
设 $DP[i][j][k]$ 表示两条路径停留点的横坐标分别是 $i$ 和 $j$,距离 $(1,1)$ 这个点的曼哈顿距离是 $k$。
我们考虑枚举曼哈顿距离和两条路径所停留点的横坐标。这样通过横坐标和曼哈顿距离就可以求出纵坐标。如题所说,每一个点只能被他上面或者左边的点到达,所以能够得到下面的方程
$$dp[i][j][k] = max\{dp[i][j-1][k-1],dp[i-1][j][k-1],dp[i][j][k-1],dp[i-1][j-1][k-1]\}+abs(a[i][k-i]-a[j][k-j])$$
附上代码
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int INF = ;
int n, a[][], dp[][][];
inline int ABS(int a) {
return a> ? a : -a;
}
inline int MAX(int x, int y) {
return x>y ? x : y;
}
int main() {
scanf("%d", &n);
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
scanf("%d", &a[i][j]);
dp[][][] = ;
for(int k=; k<=*n; k++) {
for(int j=; j<=n; j++) {
for(int i=; i<=n; i++) {
if(k-i > n || k-j > n) continue;
if(k-i < || k-j < ) break;
else dp[i][j][k] = MAX(MAX(dp[i-][j][k-], dp[i][j-][k-]), MAX(dp[i][j][k-], dp[i-][j-][k-])) + ABS(a[i][k-i]-a[j][k-j]);
}
}
}
printf("%d", dp[n][n][*n]);
}
「 CODE[VS] P2853 」 方格游戏的更多相关文章
- LibreOJ #6007. 「网络流 24 题」方格取数 最小割 最大点权独立集 最大流
#6007. 「网络流 24 题」方格取数 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- Vue+WebSocket+ES6+Canvas 制作「你画我猜」小游戏
Vue+WebSocket+ES6+Canvas 制作「你画我猜」小游戏 转载 来源:jrainlau 链接:https://segmentfault.com/a/1190000005804860 项 ...
- Libre 6007 「网络流 24 题」方格取数 / Luogu 2774 方格取数问题 (网络流,最大流)
Libre 6007 「网络流 24 题」方格取数 / Luogu 2774 方格取数问题 (网络流,最大流) Description 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从 ...
- LibreOJ #6191. 「美团 CodeM 复赛」配对游戏
二次联通门 : LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 /* LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 概率dp */ #include <cs ...
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
- 【刷题】LOJ 6007 「网络流 24 题」方格取数
题目描述 在一个有 \(m \times n\) 个方格的棋盘中,每个方格中有一个正整数. 现要从方格中取数,使任意 \(2\) 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数 ...
- LG4819/BZOJ2438 「中山市选2011」杀人游戏 Tarjan缩点+概率
问题描述 LG4819 BZOJ2438 题解 发现如果有一些人之间认识关系形成环,只需要问一个人就能把控整个环. \(\mathrm{Tarjan}\)缩点. 缩点之后所有入度为\(0\)的点,必须 ...
- 「洛谷P1080」「NOIP2012提高组」国王游戏 解题报告
P1080 国王游戏 题目描述 恰逢 \(H\)国国庆,国王邀请\(n\)位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 \( ...
- Solution -「NOI 2021」「洛谷 P7740」机器人游戏
\(\mathcal{Description}\) Link. 自己去读题面叭~ \(\mathcal{Solution}\) 首先,参悟[样例解释 #2].一种暴力的思路即为钦定集合 \ ...
随机推荐
- Net框架下-ORM框架LLBLGen的简介(转载)
Net框架下-ORM框架LLBLGen的简介 http://www.cnblogs.com/huashanlin/archive/2015/02/12/4288522.html 官方网址:http:/ ...
- E20171102-E
segment n. 环节; 部分,段落; [计算机] (字符等的) 分段; [动物学] 节片; distinct adj. 明显的,清楚的; 卓越的,不寻常的; 有区别的; 确切的;
- bzoj 1603: [Usaco2008 Oct]打谷机【瞎搞】
一棵树,碰到改变转向的边就异或一下,从1dfs一遍 #include<iostream> #include<cstdio> using namespace std; const ...
- P3402 【模板】可持久化并查集
传送门 //minamoto #include<bits/stdc++.h> using namespace std; #define getc() (p1==p2&&(p ...
- 整理 Xamarin.Forms - Plugins
Open Source Components for Xamarin Xamarin官方整理的一些开源组件,有需要可以先到这里找 GitHub: xamarin/XamarinComponents: ...
- javascript实现引用数据类型的深拷贝和浅拷贝详解
关于引用类型值的详解,请看另一篇随笔 https://www.cnblogs.com/jinbang/p/10346584.html 深拷贝和浅拷贝,也就是引用数据类型栈和堆的知识点.深浅拷贝的原型都 ...
- json和Jsonp 使用总结(1)
1.Json的使用 $.getJSON("subPreview", { jsonDatas: JSON.stringify(jsonData) }, function(data) ...
- 树形DP Gym 100496H House of Representatives
题目传送门 /* 题意:寻找一个根节点,求min f(u) = ∑ρ(v, u) * p(v).ρ(v, u)是u到v的距离,p(v)是v点的权值 树形DP:先从1出发遍历第一次,sum[u]计算u到 ...
- 题解报告:hdu 1015 Safecracker
Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Kl ...
- js截取字符串 区分中英文
方法如下: //在一个字符串中截取前面部分文字,汉字.全角符号按2个占位,数字英文.半角按一个占位,未显示完的最后加入“……”. //适合多行显示. function suolve(str, sub_ ...