HouseRobber

假设你是一个劫匪 抢劫一条街上的房子 每个房子里有一定数目的钱 但是如果抢劫相连的房子会触发报警 如何使抢劫收益最大化

public int Rob(int[] house){

int rob=0; 
int nonRob=0; 
int maxMoney=0; 
for(int i=0;ireturn maxMoney; 
} 
public static void main(String[] args) { 
int i=(int)(Math.random()*10+1);
 int[]house=new int[i]; 
System.out.println("共有"+i+"所房屋"); 
for(int a=0;aint)(Math.random()*100+1); System.out.println("第一家"+house[a]);
 } 
HouseRobber houserobber=new HouseRobber();
System.out.println("最大值"+houserobber.Rob(house)); }

思路:对于第n个房间我们所能有的选择是偷和不偷, 那么如果是做决定是偷 则上一步必须是不偷
那么 这一步的就是dp[N] = num[i -1 ] + dpNonTake[N -1]
假设dp[N] 表示的是有N个元素时候的最大值状态。
如果是不偷, 那么上一步就无所谓是不是已经偷过,所以就copy为 dp[N] = dp[N -1 ]即可,
所以总而言之为 dp[N] = Math.max(dpNontake[N-1 ] + num【i】, dp[N-1] );
一个 为Rob 一个为 nonRob 和 到当前的最大值。

你可能感兴趣的:(Leetcode,leetcode)