過河卒演算法

2021-07-10 09:37:39 字數 1192 閱讀 3712

過河卒基本思想:利用動態規劃轉空間為時間,利用動態規劃一般方法,把資料記錄下來,同時走兩條路線,只要不重合就好

#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 同樣馬的位置座標是需要給出的。現在要求你計算出卒...