输入的数组长度为n,数组中的数字为a1, a2, ..., an,颜色数组为c1, c2, ..., cn。

我们可以通过动态规划来解决这个问题。我们定义一个二维数组dp,其中dp[i][j]表示前i个数字中,以第i个数字为结尾且颜色为j的最大得分。

我们可以根据题目要求,得到状态转移方程: dp[i][0] = max(dp[i-1][1] + a[i], dp[i-1][0]) dp[i][1] = max(dp[i-1][0] + a[i], dp[i-1][1])

其中,dp[i][0]表示第i个数字为红色的最大得分,dp[i][1]表示第i个数字为蓝色的最大得分。a[i]表示第i个数字的值。

最终的答案应该是max(dp[n][0], dp[n][1]),即前n个数字中红色和蓝色的最大得分中的较大值。

接下来我们可以用一个二维数组来实现这个动态规划过程。初始状态为dp[1][0] = a[1],dp[1][1] = a[1],然后我们从2到n遍历数组,更新dp数组的值,最后返回dp[n][0]和dp[n][1]中的较大值即可。

以下是Python的实现代码:

n = int(input()) a = list(map(int, input().split())) c = input()

dp = [[0, 0] for _ in range(n+1)] dp[1][0] = a[0] dp[1][1] = a[0]

for i in range(2, n+1): dp[i][0] = max(dp[i-1][1] + a[i-1], dp[i-1][0]) dp[i][1] = max(dp[i-1][0] + a[i-1], dp[i-1][1])

print(max(dp[n][0], dp[n][1])

小红拿到了一个数组每个数字被染成了红色或蓝色。小红有很多次操作每次操作可以选择两个相邻的不同颜色的数字标记并获得它们数字之和的得分。已经被标记的数字无法再次标记。小红想知道自己最多能获得多少分。输入描述第一行输入一个正整数 �n 代表数组的长度。第二行输入 �n 个正整数 ��a i 代表小红拿到的数组。第三行输入一个仅包含 R 和 B 的字符串第 �i 个字符为 R 代表数组第 �i 个数被染

原文地址: https://www.cveoy.top/t/topic/hUcd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录