有两只老鼠和 n 块不同类型的奶酪每块奶酪都只能被其中一只老鼠吃掉。下标为 i 处的奶酪被吃掉的得分为:如果第一只老鼠吃掉则得分为 reward1i 。如果第二只老鼠吃掉则得分为 reward2i 。给你一个正整数数组 reward1 一个正整数数组 reward2 和一个非负整数 k 。请你返回第一只老鼠恰好吃掉 k 块奶酪的情况下最大 得分为多少。 示例 1:输入:reward1 = 1134
思路:动态规划。
dp[i][j][t] 表示前 i 个奶酪中,老鼠1吃了 j 块,老鼠2吃了 t 块时,老鼠1的最大得分。
状态转移方程为:
dp[i][j][t] = max(dp[i-1][j][t], dp[i-1][j-1][t]+reward1[i-1], dp[i-1][j][t-1]+reward2[i-1])
其中 dp[i-1][j][t] 表示这块奶酪不被吃;dp[i-1][j-1][t]+reward1[i-1] 表示老鼠1吃这块奶酪;dp[i-1][j][t-1]+reward2[i-1] 表示老鼠2吃这块奶酪。
最终答案为 dp[n][k][k]。
时间复杂度:O(nkk),空间复杂度:O(nkk)。
代码如下:
原文地址: https://www.cveoy.top/t/topic/bK4n 著作权归作者所有。请勿转载和采集!