這題有兩種做法。
第一種是同時考慮兩個點,也就是用4個迴圈。列舉每個點的位置,並計算總分。
f[i][j][k][l]=max(f[i][j][k][l],f[i-1][j][k-1][l],f[i][j-1][k][l-1],f[i-1][j][k][l-1],f[i][j-1][k-1][l])+a[i][j]+a[k][l];
當(i==k&&j==l)時,多算了一次a[i][j],因此扣去。
#include
#include
#include
using
namespace
std;
int a_max(int a,int b,int c,int d,int e)
intmap[11][11];
int n;
int f[11][11][11][11];
int main()
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
for (int k =1;k<=n;k++)
for (int l=1;l<=n;l++)
printf("%d",f[n][n][n][n]);
}
第二種就是考慮到兩個點都是從原點出發的,因此滿足關係式i+j=k+l
(步數相同)。當我們知道乙個點的座標時,我們只需列舉另乙個點的座標,就可以求出另乙個點的座標了。注意判斷一下另乙個點的座標是否滿足條件。
f[i][j][k]=max(f[i-1][j][k-1],f[i][j-1][k-1],f[i-1][j][k],f[i][j-1][k]))+a[i][j]+a[k][l];(同乙個點還要刪掉重複的)
P1004 方格取數
題目描述 設有n n的方格圖 n 9 我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 a0 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...
P1004 方格取數
題目描述 設有n n的方格圖 n 9 我們將其中的某些方格中填入正整數,而其他的方格中則放入數字00。如下圖所示 見樣例 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...
P1004 方格取數
洛谷團隊希望加入 題目描述 設有 n times nn n 的方格圖 n le 9 n 9 我們將其中的某些方格中填入正整數,而其他的方格中則放入數字 00。如下圖所示 見樣例 a0 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 ...