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月前
|
机器学习/深度学习 算法
P1004 方格取数
P1004 方格取数
|
1月前
6366. 在网格图中访问一个格子的最少时间(dijkstra在矩阵上的运用)
6366. 在网格图中访问一个格子的最少时间(dijkstra在矩阵上的运用)
|
11月前
|
传感器
如何计算摄影参数:分区基准面高程、相对航高、绝对航高、基线长度、航线间隔、航线数、每条航线的相片数、总相片数。
如何计算摄影参数:分区基准面高程、相对航高、绝对航高、基线长度、航线间隔、航线数、每条航线的相片数、总相片数。
748 0
|
1月前
|
存储 算法 程序员
【算法训练-搜索算法 一】【DFS网格搜索框架】岛屿数量、岛屿的最大面积、岛屿的周长
【算法训练-搜索算法 一】【DFS网格搜索框架】岛屿数量、岛屿的最大面积、岛屿的周长
85 0
|
8月前
|
数据挖掘
这图怎么画| 多组箱线图+组间/内差异分析
这图怎么画| 多组箱线图+组间/内差异分析
122 0
|
8月前
|
数据挖掘
这图怎么画| 箱线图+散点+中位数连线
这图怎么画| 箱线图+散点+中位数连线
73 0
|
10月前
|
人工智能 BI
【贪心策略】区间选点问题
【贪心策略】区间选点问题
37 0