走兩次的方格取數問題

2021-06-18 00:41:48 字數 1778 閱讀 4276

問題 給定n行n列的方陣,每個元素是乙個整數,從左上角走到右下角,每次只能向右或者下,走兩次,使得得到的總和最大。同一次經過兩個元素的話,總和只計算一次。

分析: 如果是只走一次的話,是經典的dp。走兩次的話,dp兩次是不對的……因為狀態之間有影響,第一次和最大的路徑可能會影響第二次的路徑。這個題還有乙個變形,是等價的,就是說從起點到終點只能向右和下,再從終點回起點只能向上或者左,使得總和最大。

搜尋是指數的演算法,貪心不靠譜,兩次dp也不行。所以還是嘗試兩個人同時走……,有個好處是,兩個人一起走的話,只能在同一步經過相同的格仔,這是由距離決定的。因為第step步,所在的格仔距離起點的曼哈頓距離|x - x' | + |y - y'| = step……所以走一次時,狀態是dp[(x,y)]由(x - 1, y) (x, y - 1)決定,現在狀態是dp[(x1,y1)(x2,y2)]由4個狀態確定即dp[(x1 - 1, y1)(x2 - 1, y2)] dp[(x1 - 1, x2, y2 - 1)] dp[(x1, y1 - 1)(x2 - 1, y2)] dp[(x1, y1 - 1) (x2 , y2 - 1)]確定。

const int n = 202;

const int inf = 1000000000; //無窮大

int dp[n * 2][n][n];

bool isvalid(int step,int x1,int x2,int n)

int getvalue(int step, int x1,int x2,int n)

//狀態表示dp[step][i][j] 並且i <= j, 第step步 兩個人分別在第i行和第j行的最大得分 時間複雜度o(n^3) 空間複雜度o(n^3)

int getanswer(int a[n][n],int n)

}dp[0][0][0] = a[0][0];

for (step = 1; step <= p; ++step)

//對於合法的位置進行dp

if (i != j)

else }}

}return dp[p][n - 1][n- 1];

}

以上**的複雜度空間複雜度是o(n^3),稍微想一下可以知道我們在推算dp[step]的時候 只有到了dp[step - 1],所以第一維,我們只開到2就可以了。就是step為奇數時,我們都用dp[1][i][j]表示狀態,step為偶數我們都用dp[0][i][j]表示狀態,這樣我們只需要o(n^2)的空間,這就是滾動陣列的方法。滾動陣列寫起來並不複雜,只需要對上面的**稍作修改即可,優化後的**如下:

int dp[2][n][n];

bool isvalid(int step,int x1,int x2,int n)

int getvalue(int step, int x1,int x2,int n)

//狀態表示dp[step][i][j] 並且i <= j, 第step步 兩個人分別在第i行和第j行的最大得分 時間複雜度o(n^3) 使用滾動陣列 空間複雜度o(n^2)

int getanswer(int a[n][n],int n)

}dp[0][0][0] = a[0][0];

for (step = 1; step <= p; ++step)

s = step % 2; //狀態下表標

//對於合法的位置進行dp

if (i != j)

else }}

}return dp[p % 2][n - 1][n- 1];

}

方格取數問題

點我網路流 考慮先將棋盤黑白染色變成二分圖,這樣使得每個格仔有公共邊的其他格仔和它自己都是異色的,然後把它向其他四個方向的點連一下邊,邊容量 inf s 連黑點,容量為權值,白點連 t 容量同理 於是問題轉化為乙個最小割問題 include define inf 1000000000 7 defin...

題解 方格取數問題

傳送門 在乙個有 m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。對於給定的方格棋盤,按照取數要求程式設計找出總和最大的數。這個題目也是很明顯的網路流,奇偶性建圖,最後總和 最小割即為答案 i...

題解 方格取數問題

題目戳我 text 相鄰的不能取 黑白染色。染色完之後,我們需要對不能同時選擇的點連線一條流量為 infty 的邊,以保證它們不被割開。即,被割開的一定是連向 s 或 t 的之前連過的邊,邊權是點權。上述連邊保證圖聯通,並保證割掉的邊一定是之前連的邊權為點權的邊。如果不連 infty 的邊,則原圖本...