动态规划—不相邻取数
·
题目描述

思路
用一个二维数组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]));
}
}
}
更多推荐
所有评论(0)