廊坊企业建站,网站恶意点击软件,上海工商网企业信息查询系统官网,新手做网站需要哪些教材题目 给定一个长度为n的整型数组#xff0c;表示一个选手在n轮内可选择的牌面分数。选手基于规则选牌#xff0c;请计算所有轮结束后其可以获得的最高总分数。 选择规则如下: 1.在每轮里选手可以选择获取该轮牌面#xff0c;则其总分数加上该轮牌面分数#xff0c;为其新的…题目 给定一个长度为n的整型数组表示一个选手在n轮内可选择的牌面分数。选手基于规则选牌请计算所有轮结束后其可以获得的最高总分数。 选择规则如下: 1.在每轮里选手可以选择获取该轮牌面则其总分数加上该轮牌面分数为其新的总分数。 2.选手也可不选择本轮牌面直接跳到下一轮此时将当前总分数还原为3轮前的总分数若当前轮次小于等于3(即在第1、2、3轮选择跳过轮次)则总分数置为0。 3.选手的初始总分数为0且必须依次参加每一轮。 输入描述 第一行为一个小写逗号分割的字符串表示n轮的牌面分数1n 20。 分数值为整数-100分数值100。 不考虑格式问题。 输出描述 所有轮结束后选手获得的最高总分数。 示例1: 输入 1,-5,-6,4,3,6,-2 输出 11 说明 总共有7轮牌面。 第—轮选择该轮牌面总分数为1。 第二轮不选择该轮牌面总分数还原为0。 第三轮不选择该轮牌面总分数还原为0。 第四轮选择该轮牌面总分数为4。 第五轮选择该轮牌面总分数为7。 第六轮选择该轮牌面总分数为13。 第七轮如果不选择该轮牌面则总分数还原到3轮前分数即第四轮的总分数4如果选择该轮牌面总分数为11所以选择该轮牌面。 因此最终的最高总分为11。 思路 动态规划解决设输入的数据为nums 定义dp[i]代表第i轮可得的最高分数 初始化dp[0]Math.max(0,nums[0]) 递推关系对于nums中的每一项i0当前项只有选择和不选择两种可能 选择得分为dp[i-1]nums[i] 不选择得分为dp[i-3]i3当i3时得分为0 本轮得分取两者的较大值。 最终最高分为dp[nums.length-1] 题解
package hwod;import java.util.Arrays;
import java.util.Scanner;public class PokerPlay {public static void main(String[] args) {Scanner sc new Scanner(System.in);int[] nums Arrays.stream(sc.nextLine().split(,)).mapToInt(Integer::parseInt).toArray();System.out.println(pokerPlay(nums));}private static int pokerPlay(int[] nums) {int[] dp new int[nums.length];dp[0] Math.max(0, nums[0]);for (int i 1; i nums.length; i) {if(i3) dp[i] Math.max(dp[i - 1] nums[i], 0);else dp[i] Math.max(dp[i - 1] nums[i], dp[i-3]);}return dp[nums.length - 1];}
}
推荐
如果你对本系列的其他题目感兴趣可以参考华为OD机试真题及题解JAVA查看当前专栏更新的所有题目。