帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素  均为非负整数。游戏规则如下: 1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素; 2.每次取走的各个元素只能是该元素所在行的行首或行尾; 3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号); 4.游戏结束总得分为 m 次取数得分之和。 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。 数据范围: ,矩阵中的值满足  ,由于得分可能会非常大,所以把值对  取模

区块链毕设网qklbishe.com为您提供问题的解答

帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素  均为非负整数。游戏规则如下:    1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素;    2.每次取走的各个元素只能是该元素所在行的行首或行尾;    3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号);    4.游戏结束总得分为 m 次取数得分之和。      帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。          数据范围: ,矩阵中的值满足  ,由于得分可能会非常大,所以把值对  取模均为非负整数。游戏规则如下:
1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素;
2.每次取走的各个元素只能是该元素所在行的行首或行尾;
3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号);
4.游戏结束总得分为 m 次取数得分之和。

帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。
数据范围: 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素  均为非负整数。游戏规则如下:    1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素;    2.每次取走的各个元素只能是该元素所在行的行首或行尾;    3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号);    4.游戏结束总得分为 m 次取数得分之和。      帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。          数据范围: ,矩阵中的值满足  ,由于得分可能会非常大,所以把值对  取模,矩阵中的值满足 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素  均为非负整数。游戏规则如下:    1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素;    2.每次取走的各个元素只能是该元素所在行的行首或行尾;    3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号);    4.游戏结束总得分为 m 次取数得分之和。      帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。          数据范围: ,矩阵中的值满足  ,由于得分可能会非常大,所以把值对  取模 ,由于得分可能会非常大,所以把值对 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素  均为非负整数。游戏规则如下:    1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素;    2.每次取走的各个元素只能是该元素所在行的行首或行尾;    3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号);    4.游戏结束总得分为 m 次取数得分之和。      帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。          数据范围: ,矩阵中的值满足  ,由于得分可能会非常大,所以把值对  取模 取模

思路:

  1. 各行的数据选择毫不相关,可以认为是rows次选择
  2. dp[i][j]指当前行剩余[i,j]这些数据可以选择时,可能获取的最大值
  3. 转移方程显而易见就是dp[i][j] = Math.max(dp[i + 1][j] + matrix[row][i] * (1 << (m – len)), dp[i][j – 1] + matrix[row][j] * (1 << (m – len)))
// 由于row行数据之间的计算相互独立,可以看成row次单行的计算 function matrixScore(matrix) {   let n = matrix.length   let m = matrix[0].length   // dp[i][j] 表示对于剩余[i,j]数据,可能获取的最大值   let dp = new Array(m + 1).fill(0).map(i => new Array(m + 1).fill(0))   const MOD = 1e9 + 7   let res = 0   for (let row = 0; row < n; row++) {     for (let j = 0; j < m; j++) {       // 仅剩[j,j]这一个数据,获取最大值只能是如下:(1 << n) 表示 2**n       dp[j][j] = ((1 << m) * matrix[row][j]);     }     for (let len = 1; len < m; len++) {       for (let i = 0; i < m - len; i++) {         let j = i + len         dp[i][j] = Math.max(dp[i + 1][j] + matrix[row][i] * (1 << (m - len)), dp[i][j - 1] + matrix[row][j] * (1 << (m - len)))       }     }     res = (res + (dp[0][m - 1] % MOD)) % MOD   }   return res }

04:42

以上就是关于问题帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素  均为非负整数。游戏规则如下:
1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素;
2.每次取走的各个元素只能是该元素所在行的行首或行尾;
3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号);
4.游戏结束总得分为 m 次取数得分之和。
帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。
数据范围: ,矩阵中的值满足  ,由于得分可能会非常大,所以把值对  取模的答案

欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。

区块链NFT链游项目方科学家脚本开发培训

承接区块链项目定制开发

微信:btc9767

QQ :1330797917

TELEGRAM: BTCOK9

承接区块链项目定制开发


qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素  均为非负整数。游戏规则如下: 1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素; 2.每次取走的各个元素只能是该元素所在行的行首或行尾; 3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号); 4.游戏结束总得分为 m 次取数得分之和。 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。 数据范围: ,矩阵中的值满足  ,由于得分可能会非常大,所以把值对  取模