华为od机试 - 最大报酬(python)
时间: 2023-05-08 09:00:34 浏览: 196
华为od机试代码Python语言
这道题要求我们在一段给定的整数序列中,找到一个非递减子序列,且该子序列中的数字之和最大。对于这样的问题,我们可以考虑使用动态规划算法。
我们定义一个数组dp,其中dp[i]表示以序列中第i个数字作为结尾的非递减子序列的最大和。初始状态为dp[0]=nums[0]。然后从i=1开始,我们可以根据已知状态推出dp[i]的值,即:
如果nums[i]大于等于nums[i-1],说明可以将nums[i]加入到以nums[i-1]结尾的子序列中,得到一个更大的子序列,此时dp[i]=dp[i-1]+nums[i];
如果nums[i]小于nums[i-1],那么前面的子序列就断了,从i开始重新开始构建一个新的子序列,此时dp[i]=nums[i];
最后,我们只需要在dp数组中找到最大值即可,即max(dp[0:n]),n为序列长度。
时间复杂度为O(n),可以通过此题。
阅读全文