過河卒基本思想:利用動態規劃轉空間為時間,利用動態規劃一般方法,把資料記錄下來,同時走兩條路線,只要不重合就好
#include
#include
#include
#include
#define maxx(a,b,c,d) max(max(a,b),max(c,d))
using
namespace
std;
int m,n,heart[55][55],f[110][55][55];
int main()
printf("%d",f[m+n-2][m][m]);
return
0;}
第二種 為4維陣列
//傳紙條
#includeint a[51][51] = ;
// 好感度陣列
int f[51][51][51][51] = ;
// 動態規劃陣列,f[i][j][k][l] 表示從 (0, 0) 位置由兩條不交叉的線路走到 (i, j),(k, l) 位置時的最大好感度和
intmax(int a, int b)
int main()
}// 開始迴圈解題
for( i = 1; i <= m; ++i)
int num = 0;
// 兩個點都由上走來的好感度
num = max(num, f[i - 1][j][k - 1][l]);
// 第乙個點由上走來,第二個點從左走來,並且兩個**點不重合時的好感度
if(i - 1 != k && j != l - 1)
// 第乙個點由左走來,第二個點從上走來,並且兩個**點不重合時的好感度
if(i != k - 1 && j - 1 != l)
// 兩個點都由左走來的好感度
num = max(num, f[i][j - 1][k][l - 1]);
// 加上當前兩點的好感度,即為走到這兩點時的最大好感度和
f[i][j][k][l] = num + a[i][j] + a[k][l];}}
}}
// 輸出由兩條不交叉的線路走到右下角時的最大好感度和
printf("%d\n", f[m][n][m][n]);
return
0;}
過河卒 遞推
description 如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點 圖中的p1,p2 p8 和 c 卒不能通過對方馬的...
過河卒 題解
以前碼的 include include using namespace std long long b 21 21 int n,m,a,b void init if a 2 0 b 1 0 把馬的位置和所有馬能走到的位置都賦為0,注意考慮邊界 b a 2 b 1 0 if a 2 0 b 1 m ...
過河卒 題目
題目描述 棋盤上 a 點有乙個過河卒,需要走到目標 b 點。卒行走的規則 可以向下 或者向右。同時在棋盤上 c 點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 b點 n,m 同樣馬的位置座標是需要給出的。現在要求你計算出卒...