給出乙個n×m
n×m的矩陣,每個格仔中有權值,求從(1,
1)(1
,1)到(
n,m)
(n,m
)的兩條不相交路徑使得路徑權值之和最大。
很明顯可以把題目看成兩條不相交的路徑從(1,
1)(1
,1)到(
n,m)
(n,m
)。那麼就可以設f[i
][j]
[k][
l]f[
i][j
][k]
[l]表示第一條路走到(i,
j)(i
,j),第二條路走到(k,
l)(k
,l)時的權值最大值。那麼由於可以直接從上和下兩個方向轉移過來,所以就有方程f[
i][j
][k]
[l]=
max(
max(
f[i−
1][j
][k−
1][l
],f[
i][j
−1][
k−1]
[l])
,max
(f[i
−1][
j][k
][l−
1],f
[i][
j−1]
[k][
l−1]
))f[
i][j
][k]
[l]=
max(
max(
f[i−
1][j
][k−
1][l
],f[
i][j
−1][
k−1]
[l])
,max
(f[i
−1][
j][k
][l−
1],f
[i][
j−1]
[k][
l−1]
))+a
[i][
j]+a
[k][
l]−(
(i==
k&j=
=l)?
a[i]
[j]:
0)+a
[i][
j]+a
[k][
l]−(
(i==
k&j=
=l)?
a[i]
[j]:
0)那麼最終答案很明顯就是f[n
][m]
[n][
m]f[
n][m
][n]
[m]。
但是這樣的時空複雜度太不理想了,所以可以考慮剪枝。
我們發現,如果走了sum
sum步,橫座標為x
x,那麼很明顯縱座標就是sum
−xsu
m−x。因為只能往下或右走。那麼我們就可以想到另一種方法:設f[
i][j
][k]
f[i]
[j][
k]表示走了i
i步,兩條路的橫座標分別是jj和k
k時的最大權值和。
這樣我們就可以算出兩條路的縱座標,進而進行轉移。
方程如下:f[
i][j
][k]
=max
(max
(f[i
−1][
j][k
],f[
i−1]
[j−1
][k−
1]),
max(
f[i−
1][j
][k−
1],f
[i−1
][j−
1][k
]))f
[i][
j][k
]=ma
x(ma
x(f[
i−1]
[j][
k],f
[i−1
][j−
1][k
−1])
,max
(f[i
−1][
j][k
−1],
f[i−
1][j
−1][
k]))
+a[j
][i−
j+1]
+a[k
][i−
k+1]
−(j=
=k?a
[j][
i−j+
1]:0
)+a[
j][i
−j+1
]+a[
k][i
−k+1
]−(j
==k?
a[j]
[i−j
+1]:
0)那麼最終答案就是f[n
+m−1
][n]
[n]f
[n+m
−1][
n][n
]。這樣時間複雜度就變成了o(n
3+nm
)o(n
3+nm
)。題外話這道題還可以用網路流做。
摘自
o(n2m2
)o(n
2m2)
#include
#include
using
namespace std;
int a[51]
[51],f[51]
[51][
51][51
],m,x,y,n,k;
intmain()
printf
("%d"
,f[n]
[m][n]
[m])
;return0;
}
o(n
3+nm
)o(n
3+nm
)
#include
#include
#define n 60
using
namespace std;
int n,m,f[n+n]
[n][n]
,a[n]
[n];
intmain()
printf
("%d\n"
,f[n+m-1]
[n][n]);
return0;
}
洛谷 P1006 傳紙條 DP
洛谷 p1006 傳紙條 演算法標籤 動態規劃 dp 小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排做成乙個 m 行 n 列的矩陣,而小淵和小軒被安排在矩陣對角線的兩端,因此,他們就無法直接交談了。幸運的是,他們可以通過傳紙條來進行交流。紙條要經由許多同...
洛谷P1006 傳紙條
這是一道四維dp題,注意陣列要開得恰好,不然會爆記憶體。維數越高,每一維上的數字大1的空間代價就越大 因為有限制條件每個數只能訪問一次,所以要判斷兩個人是否走到了同乙個格,以及他們上一步是否在同乙個格。如果兩個人走到了同乙個格,就跳過這次迴圈 如果兩個人上一步在同乙個格,就跳過這種情況,不再比較。動...
洛谷 P1006 傳紙條
本題要找兩條路徑,轉換一下,其實就是從左上角開始找兩條不相交的最大路徑.用f i j k l 表示兩條路徑分別走到 i,j 和 k,l 的時候的最大值.1 include2 include3 4using namespace std 56 int n,m,a 51 54 f 51 51 51 51 ...