Java实现 蓝桥杯VIP 算法训练 方格取数
问题描述
设有NN的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。
某人从图的左上角的A 点(1,1)出发,可以向下行走,也可以向右走,直到到达右下角的B点(N,N)。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。
此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。
输入格式
输入的第一行为一个整数N(表示NN的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。
输出格式
只需输出一个整数,表示2条路径上取得的最大的和。
样例输入
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
样例输出
67
分析:
这里需要注意的是i行0列,和0行j列的数据必须为0 (边界处理)
多线程同时dp。当做俩个人同时在矩阵中走;
x1,y1,表示第一个人的位置;
x2,y2,表示第二个人的位置;
dp[x1][y1][x2][y2]表示俩个人在对应的方格中时候取得的最大的数;
到达x1,y1有(x1-1,y1)(x1,y1-1)俩种状态;
到达x2,y2有(x2-1,y2)(x2,y2-1)俩种状态;
因此dp[x1][y1][x2][y2]就是这四种dp[][][][]里的最大值加上对应map[x1][y1],map[x2][y2]中的值即可,但是,要注意,如果俩个人站在同一个位置,则只加一个map即可,因为一个人取走后该位置就变为0了。
import java.util.Scanner;
public class 方格取数 {
public static int[][] map = new int[11][11];
public static int [][][][] dp = new int[11][11][11][11];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int n, m ,num;
while(true)
{
n=scanner.nextInt();
m=scanner.nextInt();
num=scanner.nextInt();
if(n==0 && m==0 && num ==0) break;
map[n][m] = num;
}
for(int x1=1;x1<=N;x1++)
for(int y1=1;y1<=N;y1++)
for(int x2=1;x2<=N;x2++)
for(int y2=1;y2<=N;y2++)
{
dp[x1][y1][x2][y2] = Math.max(Math.max(dp[x1-1][y1][x2-1][y2],dp[x1-1][y1][x2][y2-1]),
Math.max(dp[x1][y1-1][x2-1][y2],dp[x1][y1-1][x2][y2-1]));
dp[x1][y1][x2][y2]+=map[x1][y1];
if(x1!=x2 && y1!=y2)
{
dp[x1][y1][x2][y2]+=map[x2][y2];
}
}
System.out.println(dp[N][N][N][N]);
}
}
Java实现 蓝桥杯VIP 算法训练 方格取数的更多相关文章
- Java实现 蓝桥杯VIP 算法训练 麦森数
算法训练 麦森数 时间限制:1.0s 内存限制:256.0MB 问题描述 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底, ...
- Java实现 蓝桥杯VIP 算法训练 求完数
问题描述 如果一个自然数的所有小于自身的因子之和等于该数,则称为完数.设计算法,打印1-9999之间的所有完数. 样例输出 与上面的样例输入对应的输出. 例: 数据规模和约定 1-9999 publi ...
- Java实现 蓝桥杯VIP 算法训练 寂寞的数
问题描述 道德经曰:一生二,二生三,三生万物. 对于任意正整数n,我们定义d(n)的值为为n加上组成n的各个数字的和.例如,d(23)=23+2+3=28, d(1481)=1481+1+4+8+1= ...
- Java实现 蓝桥杯VIP 算法训练 回文数
import java.util.Scanner; public class 回文数 { static int time = 0; public static int change(String st ...
- Java实现蓝桥杯VIP 算法训练 找公倍数
问题描述 这里写问题描述. 打印出1-1000所有11和17的公倍数. 样例输入 一个满足题目要求的输入范例. 样例输出 与上面的样例输入对应的输出. 这道题其实没有什么可写的,但是为了让读者更方便的 ...
- Java实现 蓝桥杯VIP 基础练习 回形取数
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...
- Java实现 蓝桥杯VIP 算法训练 连通分块(并查集)
试题 算法训练 连通分块 资源限制 时间限制:200ms 内存限制:8.0MB 问题描述 连通分块 输入格式 输入的第一行包含两个整数n, m n代表图中的点的个数,m代表边的个数 接下来m行,每行2 ...
- Java实现 蓝桥杯VIP 算法训练 无权最长链
试题 算法训练 无权最长链 问题描述 给定一个n节点m边的无圈且连通的图,求直径 输入格式 第一行两个数字n,m 接下来m行每行两个数字x,y,代表x,y之间有一条边 输出格式 要求用户的输出满足的格 ...
- Java实现 蓝桥杯VIP 算法训练 星际交流
算法训练 星际交流 时间限制:1.0s 内存限制:256.0MB 问题描述 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法 ...
随机推荐
- c#得出两个列表的交集
c#提供了Intersect来得到两个列表的交集,它是通过使用默认的相等比较器对值进行比较生成两个序列的交集,定义为: public static IEnumerable<TSource> ...
- spring test---测试SpringMvc初识
现在越来越多人使用SpringMvc来开发系统,在开发中可定需要对后台url地址请求测试,并且返回预期的结果! Spring提供的测试类MockMvc来进行url地址请求测试,使用方方式: packa ...
- java ->String、StringBuffer、StringBuilder三者之间的区别
1.首先说运行速度,速度由快到慢排列:StringBuilder > StringBuffer > String String最慢的原因: String为字符串常量,而StringBuil ...
- 让.NetCore程序跑在任何有docker的地方
一.分别在Windows/Mac/Centos上安装Docker Windows上下载地址:https://docs.docker.com/docker-for-windows/install/(wi ...
- 初识JAVA(学习记录)
Java 1.1Java简介 Java是一种跨平台的,面向对象的程序设计语言.无论是电脑还是手机,到处都运行着JAVA开发的应用程序:JAVA程序可以在任何计算机.操作系统以及支持JAVA的硬件设备上 ...
- String的正则函数
String的正则函数: 查找敏感词: 4种情况 1. 查找一个固定的敏感词的位置i: var i=str.indexOf("敏感词",fromi) 在str中,从fromi位置开 ...
- jsp获取当前日期
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <jsp: ...
- C语言qsort()函数的实现
#include <stdio.h> void qsort(void * base, int num, int width, int (*comp)(const void *, const ...
- BZOJ 1084DP
1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2796 Solved: 1391[Submit][Sta ...
- 29-3 union的使用
联合结果集union (集合运算符) -------------------------使用union联合结果集---------------- select tsname,tsgender,tsag ...