题解 | #打家劫舍(二)#
打家劫舍(二)
http://www.nowcoder.com/practice/6a8b2ceb3f8f4e5891939d7d7cbbd2c4
在一的基础上改进,做两个dp分别是代表arr[0 ~ n-2],arr[1 ~ (n-1)]. import java.util.*; public class Main{
public static int process(int[] arr,int n){
int[]dp1=new int[n];
int[]dp2=new int[n];
dp1[1]=arr[0];
dp2[1]=arr[1];
int res=Math.max(arr[0],arr[1]);
for(int i=2;i<n;i++){
dp1[i]=Math.max(dp1[i-2]+arr[i-1],dp1[i-1]);
dp2[i]=Math.max(dp2[i-2]+arr[i],dp2[i-1]);
res=Math.max(dp1[i],dp2[i]);
}
return res;
}
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[]arr=new int[n];
for(int i=0;i<n;i++)
arr[i]=sc.nextInt();
System.out.print(process(arr,n));
}
}