题目描述

在这里插入图片描述

思路

用一个二维数组dp[n][2]
dp[n][0]代表不取当前的数
dp[n][1]代表取当前的数
不取当前的数,前面的数可取可不取 dp[n][0] = Math.max(dp[n-1][0],dp[n-1][1])
取当前的数,前面的数必不可以取 dp[n][1] = dp[]n-1[0]+arr[n-1]

代码

import java.util.*;
public class Main {
 public static void main(String args[])
 {
     Scanner scan = new Scanner(System.in);
     while(scan.hasNext())
     {
     int num = scan.nextInt();
     long []arr = new long[num+5];
     long [][]dp = new long[num+5][2];//一个存考虑当前情况,一个不考虑
     for(int i =1;i<=num;i++)
     {
     arr[i] = scan.nextLong();//以某个数为结尾的最大,再取一个最大
     }
     for(int i=1;i<=num;i++)
     {
    	 dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]);
    	 dp[i][1] = dp[i-1][0]+arr[i];
     }
     System.out.println(Math.max(dp[num][0], dp[num][1]));
 }
     }
 }
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐