抢劫者算法

题目:你是一名专业强盗,计划沿着一条街打劫。每间房屋都储存有一定金额的钱,唯一能阻止你打劫的约束条件就是房屋之间有安全系统相连,如果同一个晚上有两间相邻的房屋被闯入,它们就会自动联络警察,因此不可以打劫相邻的房屋。

给出一个表示每个房子的金额的非负整数的列表,确定你今天晚上可以抢救的最大金额,而不提醒警察。

例如:给定一个整数数组a[]={-1, 2, 3, -5, 9, 4, 10},求出不相邻元素组成的子集中元素之和最大是多少。那么子集{2,9,10}的元素之和最大。

思路:rob方法是求子集最大和的方法,最终结果是max(a[i]+rob(a,i+2), rob(a,i+1)),采用递归直到i++到数组的尾部。

public static void main(String[] args) {

    int[] a = {2,3,5, -2, -6,9,10,5, -10,20,30,40,35};

    System.out.println(rob2(a,0));

}

static int rob2(int[] a,int i) {

    if(i> a.length-1) {

        return 0;

    }

    if(i == a.length-1) {

        return max(a[a.length-1],0);

    }

    int include = a[i] +rob2(a, i+2);

    int exclude =rob2(a, i+1);

    return max(include, exclude);

}

static int max(int a,int b) {

    return a>b?a:b;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,345评论 0 9
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 13,728评论 0 89
  • 贪心算法 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上...
    fredal阅读 9,279评论 3 52
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,908评论 0 2
  • 今天跟伟瀚赌气,果断自己和表妹来佛山看中医,医生给我把了脉后说:三天之后如果还是没有来经期,那就基本上确定是已经怀...
    蘭Zena阅读 53评论 0 0