luogu P1005 矩阵取数游戏 区间DP

Posted iat14

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1005 矩阵取数游戏 区间DP相关的知识,希望对你有一定的参考价值。

每一行是独立的,分开处理即可。

dp[i][j]表示[i,j]这一段,取完的最大收益。转移很显然,dp[i][j] = max(dp[i + 1][j] + 2^(m - (j - l)) * mp[t][i],dp[i][j - 1] + 2^(m - (j - l)) * mp[t][j])

不想写高精度,python水一发。

 1 n,m = map(int,input().split())
 2 res = 0
 3 mp = [[0 for i in range(0,80,1)] for i in range(0,80,1)]
 4 dp = [[-1 for i in range(0,80,1)] for i in range(0,80,1)]
 5 def dfs(t,l,r):
 6     if (dp[l][r] >= 0):
 7         return dp[l][r]
 8     if (l == r):
 9         dp[l][r] = int(pow(2,m)) * mp[t][l]
10         return dp[l][r]
11     dp[l][r] = max(dfs(t,l + 1,r) + int(pow(2,m - (r - l))) * mp[t][l],dfs(t,l,r - 1) + int(pow(2,m - (r - l))) * mp[t][r])
12     return dp[l][r]
13 for i in range(0,n,1):
14     mp[i] = list(map(int,input().split(" ")))
15 for o in range(0,n,1):
16     for i in range(0,m,1):
17         for j in range(0,m,1):
18             dp[i][j] = -1
19     res += dfs(o,0,m - 1)
20 print(res)

 

以上是关于luogu P1005 矩阵取数游戏 区间DP的主要内容,如果未能解决你的问题,请参考以下文章

P1005 [NOIP2007 提高组] 矩阵取数游戏(区间dp)

P1005 矩阵取数游戏 (60)

18.7.27 luogu P1005 矩阵取数游戏

AC日记——矩阵取数游戏 洛谷 P1005

P1005 矩阵取数游戏

洛谷 P1005 矩阵取数游戏 题解