1277:【例9.21】方格取数

简介: 1277:【例9.21】方格取数

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

设有N×N的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示:

某人从图中的左上角A出发,可以向下行走,也可以向右行走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。

此人从A点到B点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。

【输入】

第一行为一个整数N(N≤10),表示N×N的方格图。

接下来的每行有三个整数,第一个为行号数,第二个为列号数,第三个为在该行、该列上所放的数。一行“0 0 0”表示结束。

【输出】

第一个整数,表示两条路径上取得的最大的和。

【输入样例】

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

1. #include <iostream>
2. #include <cstdio>
3. #include <cmath>
4. #include <algorithm>
5. using namespace std;
6. int a[55][55];
7. int f[55][55][55][55];
8. int main()
9. {
10.   int n,x,y,z;
11.   scanf("%d %d %d %d",&n,&x,&y,&z);
12.   while(x&&y&&z){
13.     a[x][y]=z;scanf("%d %d %d",&x,&y,&z);
14.   }
15.   for(int i=1;i<=n;i++)
16.     for(int j=1;j<=n;j++)
17.       for(int k=1;k<=n;k++)
18.         for(int l=1;l<=n;l++){
19.           f[i][j][k][l]=max(max(f[i-1][j][k-1][l],f[i][j-1][k][l-1]),max(f[i-1][j][k][l-1],f[i][j-1][k-1][l]))
20.                   +a[i][j];
21.           if(i!=k&&j!=l) f[i][j][k][l]+=a[k][l];
22.         }
23.   printf("%d\n",f[n][n][n][n]);
24. return 0;
25. }


相关文章
|
1月前
lanqiao OJ 803 方格取数
lanqiao OJ 803 方格取数
19 3
|
6月前
|
机器学习/深度学习 算法
P1004 方格取数
P1004 方格取数
|
6月前
|
人工智能 BI
区间问题之区间选点
区间问题之区间选点
|
6月前
假设你正在玩跳格子(所有格子排成一个纵列)游戏。需要 跳完n 个格子你才能抵达终点。 每次你可以跳 1 或 2 个格子。你有多少种不同的方法可以到达终点呢? 注意:给定 n 是一个正整数。
假设你正在玩跳格子(所有格子排成一个纵列)游戏。需要 跳完n 个格子你才能抵达终点。 每次你可以跳 1 或 2 个格子。你有多少种不同的方法可以到达终点呢? 注意:给定 n 是一个正整数。
|
6月前
|
存储 算法 程序员
【算法训练-搜索算法 一】【DFS网格搜索框架】岛屿数量、岛屿的最大面积、岛屿的周长
【算法训练-搜索算法 一】【DFS网格搜索框架】岛屿数量、岛屿的最大面积、岛屿的周长
124 0
|
人工智能 BI
【贪心策略】区间选点问题
【贪心策略】区间选点问题
62 0
LeetCode 1828. 统计一个圆中点的数目
给你一个数组 points ,其中 points[i] = [xi, yi] ,表示第 i 个点在二维平面上的坐标。多个点可能会有 相同 的坐标。
108 0
每日三题-旋转图像、合并区间、除自身以外数组的乘积
每日三题-旋转图像、合并区间、除自身以外数组的乘积
72 0
每日三题-旋转图像、合并区间、除自身以外数组的乘积