给定一个NxN网格,每个像元都有一定的权重,并且网格中有2M个像元被标记,因此我们需要以这种方式遍历(从标记的像元开始并在标记的像元处结束)网格所有路径都必须是唯一的(也包括起点和终点),而且所有路径中所有像元的权重之和应尽可能大。
输入:-
假设N = 4,M = 2
(1 1), (2 2), (3 3), (4 4){在网格中标记为单元格}
1 -1 -1 -1
1 1 1 1
1 1 1 1
-1 -1 -1 1 {带权重的网格}
输出:-
首先,我们需要输出访问过的单元格数量,然后输出路径
5 1 1 2 1 3 1 3 2 3 3 {已访问5个单元,(1,1)开始和(3,3)结束}
5 4 4 3 4 2 4 2 3 2 2 {与上一个相似}
所以我们访问了所有标记的单元格,并且总重量(第一条路径+第二条路径的权重之和)是最大可能的。
我的想法-:
我意识到(如果有错,请纠正我)这是一些网格+ DP问题的组合
(1)。在最大重量的网格中找到路径。
(2)。从给定单元开始到达给定单元。
现在上面两个是标准的DP +网格问题,我分别解决了每个问题
#include <bits/stdc++.h>
using namespace std;
#define F(i,a,b) for(int i = (int)(a); i <= (int)(b); i++)
#define RF(i,a,b) for(int i = (int)(a); i >= (int)(b); i--)
int main()
{
int X,Y; //X:number of rows, Y: number of columns
X = Y = 10; //assuming 10X10 matrix
int Cost[X][Y];
F(i,0,X-1)
{
F(j,0,Y-1)
{
//Take input the cost of visiting cell (i,j)
cin>>Cost[i][j];
}
}
int MinCost[X][Y]; //declare the minCost matrix
MinCost[0][0] = Cost[0][0];
// initialize first row of MinCost matrix
F(j,1,Y-1)
MinCost[0][j] = MinCost[0][j-1] + Cost[0][j];
//Initialize first column of MinCost Matrix
F(i,1,X-1)
MinCost[i][0] = MinCost[i-1][0] + Cost[i][0];
//This bottom-up approach ensures that all the sub-problems needed
// have already been calculated.
F(i,1,X-1)
类似地,我解决了路径查找器,但是后来我意识到这是2个源问题,我们可以从2个指定的单元格开始(1个开始的标记单元格和1个结束的标记单元格),但是我需要提供它们必须满足的中间单元格
那么您能提供一些提示或伪代码如何合并所有这些问题吗?