帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素 均为非负整数。游戏规则如下: 1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素; 2.每次取走的各个元素只能是该元素所在行的行首或行尾; 3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号); 4.游戏结束总得分为 m 次取数得分之和。 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。 数据范围: ,矩阵中的值满足 ,由于得分可能会非常大,所以把值对 取模
区块链毕设网qklbishe.com为您提供问题的解答
帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素 均为非负整数。游戏规则如下:
1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素;
2.每次取走的各个元素只能是该元素所在行的行首或行尾;
3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号);
4.游戏结束总得分为 m 次取数得分之和。
帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。
数据范围: ,矩阵中的值满足 ,由于得分可能会非常大,所以把值对 取模
思路:
- 各行的数据选择毫不相关,可以认为是rows次选择
- dp[i][j]指当前行剩余[i,j]这些数据可以选择时,可能获取的最大值
- 转移方程显而易见就是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链游项目方科学家脚本开发培训
从业7年-专注一级市场
微信:btc9767
TELEGRAM :https://t.me/btcok9
具体资料介绍
web3的一级市场千万收益的逻辑
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素 均为非负整数。游戏规则如下:
1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素;
2.每次取走的各个元素只能是该元素所在行的行首或行尾;
3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号);
4.游戏结束总得分为 m 次取数得分之和。
帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。
数据范围: ,矩阵中的值满足 ,由于得分可能会非常大,所以把值对 取模
微信:btc9767
TELEGRAM :https://t.me/btcok9
具体资料介绍
web3的一级市场千万收益的逻辑
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素 均为非负整数。游戏规则如下:
1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素;
2.每次取走的各个元素只能是该元素所在行的行首或行尾;
3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号);
4.游戏结束总得分为 m 次取数得分之和。
帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。
数据范围: ,矩阵中的值满足 ,由于得分可能会非常大,所以把值对 取模
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素 均为非负整数。游戏规则如下:
1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素;
2.每次取走的各个元素只能是该元素所在行的行首或行尾;
3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号);
4.游戏结束总得分为 m 次取数得分之和。
帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。
数据范围: ,矩阵中的值满足 ,由于得分可能会非常大,所以把值对 取模
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n*m 的矩阵,矩阵中的每个元素 均为非负整数。游戏规则如下: 1.每次取数时须从每行各取走一个元素,共 n 个。m 次后取完矩阵所有元素; 2.每次取走的各个元素只能是该元素所在行的行首或行尾; 3.每次取数都有一个得分值,为每行取数的得分之和, 每行取数的得分 = 被取走的元素值 * 2i,其中i表示第 i 次取数(从1开始编号); 4.游戏结束总得分为 m 次取数得分之和。 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。 数据范围: ,矩阵中的值满足 ,由于得分可能会非常大,所以把值对 取模