洛谷 P1004 方格取数 题解
P1004 方格取数
题目描述
设有 \(N \times N\) 的方格图 \((N \le 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 \times N\)的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的\(0\)表示输入结束。
输出格式
只需输出一个整数,表示\(2\)条路径上取得的最大的和。
输入输出样例
输入 #1
8
2 3 13
2 6 6
3 5 7
4 4 14
5 2 21
5 6 4
6 3 15
7 2 14
0 0 0
输出 #1
67
说明/提示
NOIP 2000 提高组第四题
【思路】
多维dp
因为n的范围就是小于等于9
非常的小
所以完全可以考虑f(i,j,k,l) 表示状态
i,j表示第一次走到的位置
k,l表示第二次走到的位置
然后可以四重循环枚举
虽然不会爆复杂度
但是有一种很简单的方法可以少枚举一维
因为这两次走的步数都是一样的
所以第一次的步数等于i + j
那么只要知道k,就可以求出l
用i + j - k就可以求出
所以很容易就少枚举了一层循环
然后每个状态都有四种可能的情况
第一次是从左边移过来的,第二次是从上边移过来的
第一次是从左边移过来的,第二次是从左边移过来的
第一次是从上边移过来的,第二次是从上边移过来的’
第一次是从上边移过来的,第二次是从左边移过来的
然后比较这里免得最大值,
如果移动后的点位置相同,那就只加上这一个点的值
如果不同那就加上到达的两个点的值
【完整代码】
#include<iostream>
#include<cstdio>
using namespace std;
const int Max = 11;
int f[Max][Max][Max][Max];
int a[Max][Max];
int main()
{
int n;
cin >> n;
int x,y,z;
while(1)
{
cin >> x >> y >> z;
if(x == 0 && y == 0)
break;
a[x][y] = z;
}
for(int i = 1;i <= n;++ i)
{
for(int j = 1;j <= n;++ j)
{
for(int k = 1;k <= n;++ k)
{
int l = i + j - k;
if(l <= 0)
break;
f[i][j][k][l] = max(max(f[i - 1][j][k - 1][l],f[i - 1][j][k][l - 1]),max(f[i][j - 1][k - 1][l],f[i][j - 1][k][l - 1]));
if(i == k && j == l)
f[i][j][k][l] += a[i][j];
else
f[i][j][k][l] += a[i][j] + a[k][l];
}
}
}
cout << f[n][n][n][n] << endl;
return 0;
}
洛谷 P1004 方格取数 题解的更多相关文章
- 棋盘DP三连——洛谷 P1004 方格取数 &&洛谷 P1006 传纸条 &&Codevs 2853 方格游戏
P1004 方格取数 题目描述 设有N $\times N$N×N的方格图(N $\le 9$)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A ...
- 洛谷 P1004 方格取数 【多进程dp】
题目链接:https://www.luogu.org/problemnew/show/P1004 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 ...
- 洛谷P1004 方格取数
网络流大法吼 不想用DP的我选择了用网络流-- 建模方法: 从源点向(1,1)连一条容量为2(走两次),费用为0的边 从(n,n)向汇点连一条容量为2,费用为0的边 每个方格向右边和下边的方格连一条容 ...
- 【动态规划】洛谷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 ...
- 洛谷P1004 方格取数-四维DP
题目描述 设有 N \times NN×N 的方格图 (N \le 9)(N≤9) ,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 00 .如下图所示(见样例): A 0 0 0 0 0 ...
- Codevs 1043 ==洛谷 P1004 方格取数
题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...
- 洛谷 - P1004 - 方格取数 - 简单dp
https://www.luogu.org/problemnew/show/P1004 这道题分类到简单dp但是感觉一点都不简单……这种做两次的dp真的不是很懂怎么写.假如是贪心做两次,感觉又不能证明 ...
- 洛谷 P1004 方格取数 【多线程DP/四维DP/】
题目描述(https://www.luogu.org/problemnew/show/1004) 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0. ...
随机推荐
- Delphi调用爷爷类的方法(自己构建一个procedure of Object)
Delphi通过inherited 可以调用父类的方法,但是没有提供直接调用父类的父类的方法(爷爷类),通过变通的方式实现如下: 假设父类是TFather,爷爷类TGrand,调用爷爷类的Write方 ...
- python中的可哈希与不可哈希
什么是可哈希(hashable)? 简要的说可哈希的数据类型,即不可变的数据结构(字符串str.元组tuple.对象集objects). 哈希有啥作用? 它是一个将大体量数据转化为很小数据的过程,甚至 ...
- 解决跟Docker私有仓库登陆,推送,拉取镜像出现的报错
出现问题:Error response from daemon: Get https://192.168.186.120/v1/users/: dial tcp 192.168.186.120:443 ...
- WPF内嵌网页的两种方式
在wpf程序中,有时会内嵌网页.内嵌网页有两种方法,一种是使用wpf自带WebBrowser控件来调用IE内核,另一种是使用CefSharp包来调用chrom内核. 一.第一种使用自带WebBrows ...
- java之struts2之类型转换
在使用servlet开发中,表单中提交的数据到servlet后都是字符串类型,需要程序员手动进行类型转换. 但是到struts2后,基本数据类型struts2都可以转换.但是如果是自定义类型,stru ...
- 各种GAN的学习和总结
GAN: https://www.cnblogs.com/kk17/p/10046884.html WGAN: https://www.cnblogs.com/Allen-rg/p/10305125. ...
- cloudera manager(CDH)实践
cloudera manager 可以简化 Hadoop 的安装配置过程,自动在集群节点上安 装 hadoop 相关组件,创建用户,并管理各个组件服务.本手册以 cloudera manager 的 ...
- viewer 图片点击放大 用法汇总
A 不用viewer插件 1弹出框 https://www.cnblogs.com/web1/p/8989967.html 2表格中 https://www.jianshu.com/p/c17f4f6 ...
- websocket之简易聊天室
一,带昵称的群聊 #!/usr/bin/env python # -*- coding:utf8 -*- import json from flask import Flask, request, r ...
- Linux磁盘管理——directory tree与mount point
参考:/sys 和 /dev 区别 Linux磁盘管理——虚拟文件系统 Directory tree Linux内的所有数据都是以文件的形态来呈现的,所以整个Linux系统最重要的地方就是direct ...