給定一張 $n\times n$ 的網格。每個格仔上都有乙個係數 $a$,先下 $a$ 和 $b$ 兩人選擇兩條 $(1,1)\rightarrow (n,n)$ 路徑。要求著兩條路徑不能相同。並且要計算出兩條路徑每乙個相對應的格仔上的係數的差的絕對值之和。
要求選擇路徑是滿足下列條件:
只能選擇座標增加的方向。
棋盤 dp。
既然是在乙個棋盤中。並且已經規定了行走的方向。所以在移動的格仔的數量相同時。兩個路徑停留的點到 $(1,1)$ 這個點的曼哈頓距離(橫座標$+$縱座標)是相同的。而且知道了橫座標和曼哈頓距離就可以求出點的縱座標。
設 $dp[i][j][k]$ 表示兩條路徑停留點的橫座標分別是 $i$ 和 $j$,距離 $(1,1)$ 這個點的曼哈頓距離是 $k$。
我們考慮列舉曼哈頓距離和兩條路徑所停留點的橫座標。這樣通過橫座標和曼哈頓距離就可以求出縱座標。如題所說,每乙個點只能被他上面或者左邊的點到達,所以能夠得到下面的方程
$$dp[i][j][k] = max\+abs(a[i][k-i]-a[j][k-j])$$
#include #include#include
using
namespace
std;
const
int inf = 2147483640
;int n, a[103][103], dp[103][103][203
];inline
int abs(int
a) inline
int max(int x, int
y) int
main() }}
printf("%d
", dp[n][n][2*n]);
}
1277 方格取數
設有n n的方格圖,我們在其中的某些方格中填入正整數,而其它的方格中則放入數字0。如下圖所示 某人從圖中的左上角a出發,可以向下行走,也可以向右行走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從a點到b點共走了兩次,試找出兩條這樣的路徑,使得取得的數字...
2017 10 22 方格染色 失敗總結
詳細題解網上有好多。一開始想用乙個並查集維護 確定關係 乙個並查集維護相等關係 但會出現一些無解判不出來 原因未知 所以就只能寫加權並查集,記錄每個點和他根節點的相等關係 0相等 1不等 然後原點選0還是1影響方塊 1 0 已填的數影響方塊 1 0 座標影響 方塊 1 0 統一一下就可以了 注 1 ...
1907 方格取數 3
時間限制 2 s 空間限制 256000 kb 題目等級 大師 master 題解檢視執行結果 問題描述 在乙個有m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任 意2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。程式設計任務 對於給定的方格棋...