P1004 方格取数
题目描述
设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放
人数字0。如下图所示(见样例):
A
0 0 0 0 0 0 0 0
0 0 13 0 0 6 0 0
0 0 0 0 7 0 0 0
0 0 0 14 0 0 0 0
0 21 0 0 0 4 0 0
0 0 15 0 0 0 0 0
0 14 0 0 0 0 0 0
0 0 0 0 0 0 0 0
. B
某人从图的左上角的A点出发,可以向下行走,也可以向右走,直到到达右下角的B
点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。
此人从A点到B点共走两次,试找出2条这样的路径,使得取得的数之和为最大。
输入输出格式
输入格式:
输入的第一行为一个整数N(表示N*N的方格图),接下来的每行有三个整数,前两个
表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。
输出格式:
只需输出一个整数,表示2条路径上取得的最大的和。
输入输出样例
说明
NOIP 2000 提高组第四题
四维dp (记录两人坐标)
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- #define inf 2147483647
- const ll INF = 0x3f3f3f3f3f3f3f3fll;
- #define ri register int
- template <class T> inline T min(T a, T b, T c)
- {
- return min(min(a, b), c);
- }
- template <class T> inline T max(T a, T b, T c)
- {
- return max(max(a, b), c);
- }
- template <class T> inline T min(T a, T b, T c, T d)
- {
- return min(min(a, b), min(c, d));
- }
- template <class T> inline T max(T a, T b, T c, T d)
- {
- return max(max(a, b), max(c, d));
- }
- #define pi acos(-1)
- #define me(x, y) memset(x, y, sizeof(x));
- #define For(i, a, b) for (int i = a; i <= b; i++)
- #define FFor(i, a, b) for (int i = a; i >= b; i--)
- #define mp make_pair
- #define pb push_back
- const int maxn = ;
- #define mod 100003
- const int N=;
- // name*******************************
- int f[][][][];
- int a[][];
- int ans=;
- int n;
- int x,y,z;
- // function******************************
- //***************************************
- int main()
- {
- scanf("%d",&n);
- scanf("%d %d %d",&x,&y,&z);
- while(x!=)
- {
- a[x][y]=z;
- scanf("%d %d %d",&x,&y,&z);
- }
- For(i,,n)
- For(j,,n)
- For(k,,n)
- For(l,,n)
- {
- f[i][j][k][l]=max(f[i-][j][k-][l],f[i][j-][k-][l],f[i-][j][k][l-],f[i][j-][k][l-])+a[i][j]+a[k][l];
- if(i==k&&j==l)
- f[i][j][k][l]-=a[i][j];
- }
- cout<<f[n][n][n][n];
- return ;
- }
三维dp (记录总步数)
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- #define inf 2147483647
- const ll INF = 0x3f3f3f3f3f3f3f3fll;
- #define ri register int
- template <class T> inline T min(T a, T b, T c)
- {
- return min(min(a, b), c);
- }
- template <class T> inline T max(T a, T b, T c)
- {
- return max(max(a, b), c);
- }
- template <class T> inline T min(T a, T b, T c, T d)
- {
- return min(min(a, b), min(c, d));
- }
- template <class T> inline T max(T a, T b, T c, T d)
- {
- return max(max(a, b), max(c, d));
- }
- #define pi acos(-1)
- #define me(x, y) memset(x, y, sizeof(x));
- #define For(i, a, b) for (int i = a; i <= b; i++)
- #define FFor(i, a, b) for (int i = a; i >= b; i--)
- #define mp make_pair
- #define pb push_back
- const int maxn = ;
- #define mod 100003
- const int N=;
- // name*******************************
- int f[][][];
- int a[][];
- int ans=;
- int n;
- int x,y,z;
- // function******************************
- //***************************************
- int main()
- {
- scanf("%d",&n);
- scanf("%d %d %d",&x,&y,&z);
- while(x!=)
- {
- a[x][y]=z;
- scanf("%d %d %d",&x,&y,&z);
- }
- For(i,,*n)
- For(x1,,n)
- For(x2,,n)
- {
- int y1=i-x1;
- int y2=i-x2;
- f[i][x1][x2]=max(f[i-][x1-][x2],f[i-][x1][x2-],f[i-][x1][x2],f[i-][x1-][x2-])+a[x1][y1]+a[x2][y2];
- if(x1==x2)
- f[i][x1][x2]-=a[x1][y1];
- }
- cout<<f[n*][n][n];
- return ;
- }
二维dp (逆着走就可以了)
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- #define inf 2147483647
- const ll INF = 0x3f3f3f3f3f3f3f3fll;
- #define ri register int
- template <class T> inline T min(T a, T b, T c)
- {
- return min(min(a, b), c);
- }
- template <class T> inline T max(T a, T b, T c)
- {
- return max(max(a, b), c);
- }
- template <class T> inline T min(T a, T b, T c, T d)
- {
- return min(min(a, b), min(c, d));
- }
- template <class T> inline T max(T a, T b, T c, T d)
- {
- return max(max(a, b), max(c, d));
- }
- #define pi acos(-1)
- #define me(x, y) memset(x, y, sizeof(x));
- #define For(i, a, b) for (int i = a; i <= b; i++)
- #define FFor(i, a, b) for (int i = a; i >= b; i--)
- #define mp make_pair
- #define pb push_back
- const int maxn = ;
- #define mod 100003
- const int N=;
- // name*******************************
- int f[][];
- int a[][];
- int ans=;
- int n;
- int x,y,z;
- // function******************************
- //***************************************
- int main()
- {
- scanf("%d",&n);
- scanf("%d %d %d",&x,&y,&z);
- while(x!=)
- {
- a[x][y]=z;
- scanf("%d %d %d",&x,&y,&z);
- }
- For(i,,*n)
- FFor(x1,n,)
- FFor(x2,n,)
- {
- int y1=i-x1;
- int y2=i-x2;
- f[x1][x2]=max(f[x1-][x2],f[x1][x2-],f[x1][x2],f[x1-][x2-])+a[x1][y1]+a[x2][y2];
- if(x1==x2)
- f[x1][x2]-=a[x1][y1];
- }
- cout<<f[n][n];
- return ;
- }
P1004 方格取数的更多相关文章
- [动态规划]P1004 方格取数
---恢复内容开始--- 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 ...
- 棋盘DP三连——洛谷 P1004 方格取数 &&洛谷 P1006 传纸条 &&Codevs 2853 方格游戏
P1004 方格取数 题目描述 设有N $\times N$N×N的方格图(N $\le 9$)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A ...
- 洛谷 P1004 方格取数 题解
P1004 方格取数 题目描述 设有 \(N \times N\) 的方格图 \((N \le 9)\),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字\(0\).如下图所示(见样例): ...
- P1004 方格取数(四维dp)
P1004 方格取数 思路如下 这题是看洛谷大佬的思路才写出来的,所以我会把大佬的思路展示如下: 1⃣️:我们可以找到一个叫思维dp的东西,dp[i][j][k][l],其中前两维表示一个人从原点出发 ...
- P1004 方格取数——奇怪的dp
P1004 方格取数 题目描述 设有 \(N\times N\) 的方格图 \((N\leq 20)\),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 \(0\) .如下图所示(见样例) ...
- 洛谷 P1004 方格取数 【多进程dp】
题目链接:https://www.luogu.org/problemnew/show/P1004 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 ...
- 洛谷P1004 方格取数
网络流大法吼 不想用DP的我选择了用网络流-- 建模方法: 从源点向(1,1)连一条容量为2(走两次),费用为0的边 从(n,n)向汇点连一条容量为2,费用为0的边 每个方格向右边和下边的方格连一条容 ...
- P1004方格取数
这是提高组得一道动态规划题,也是学习y氏思考法的第一道题. 题意为给定一个矩阵,里面存有一些数,你从左上角开始走到右下角,另一个人从右下角开始走到左上角,使得两个人取数之和最大,当然一个数只可以取走一 ...
- 洛谷 P1004 方格取数
题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...
- 【动态规划】洛谷P1004方格取数
题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...
随机推荐
- java.lang.NoSuchMethodError 报500
1. 概述 mvc项目 接口报500 localhost 错误日志 07-Jan-2019 17:12:43.664 SEVERE [catalina-exec-21] org.apache.cata ...
- arcgis 加载高德地图 es6的方式
目前很多arcgis 加载高德地图是dojo的方式 外部引入文件,现在改成这种方式 /** * Created by Administrator on 2018/5/14 0014. */ impor ...
- oracle 企业管理器及无线网环境下配置方法
注意: oracle em 的访问地址在 D:\oracle\product\11.2.0\dbhome_1\install 下的文件里. 如果在windows 安装oracle,并且在本地访问,or ...
- 对象的数据属性(Object)
value: 对象属性的默认值,默认值为undefined configurable: 能否使用delete.能否需改属性特性.或能否修改访问器属性.,false为不可重新定义,默认值为true en ...
- 数据可视化d3.v4.js
<html> <head> <meta charset="utf-8"> <title>做一个简单的条形图</title> ...
- npm、webpack、Gulp 中文教程
按顺序阅读 1.npm 模块管理器 2.package.json 文件 3.npm 模块安装机制简介 4.npm scripts 使用指南 5.CommonJS 规范 随着 es6 模块化特性的出现, ...
- beautifulsoup之CSS选择器
BeautifulSoup支持大部分的CSS选择器,其语法为:向tag或soup对象的.select()方法中传入字符串参数,选择的结果以列表形式返回. tag.select("string ...
- inclusion_tag 界面的嵌套 和渲染
后端的html渲染到前端: 如果后端直接定义的是html标签,传到前端的时候因为浏览器的安全机制就会直接渲染成字符串如果想要渲染成需要的标签,就需要在后端用make_save()进行包裹,或者直接在前 ...
- 使用mac版思维导图软件MindNode
下载地址 http://pan.baidu.com/s/1hq3fUVq 思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的 ...
- [控件] ColorfulProgressView
ColorfulProgressView 效果 说明 1. 支持颜色定制 2. 进度条动画可以自己控制 3. 简单易用 源码 https://github.com/YouXianMing/UI-Com ...