题解 | #打家劫舍(二)#

打家劫舍(二)

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));
}

}

全部评论

相关推荐

点赞 评论 收藏
分享
认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务