Description
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
Input
每组测试案例有两行,第一行只有一个整数N,代表着有N间房屋(2 <= N <= 10000)
第二行有N个整数,代表着每间房屋里的金额,金额范围[0, 1000]。
Output
输出你可以得到的最高金额
Sample Input
4
1 3 2 1
5
2 7 9 3 1
Sample Output
4
12
当偷到第n家的时候,只需要考虑只有n家这么大的问题规模
核心代码: dp[i] = max(dp[i-2]+arr[i],dp[i-1]);
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int *arr,n,*dp;
while(scanf("%d",&n)!=EOF){
arr = new int[n];
dp = new int[n];
for(int i = 0; i < n ;i++){
cin>>arr[i];
}
dp[0] = arr[0];
dp[1] = max(arr[1],arr[0]);
for(int i = 2; i < n; i++){
dp[i] = max(dp[i-2]+arr[i],dp[i-1]);
}
cout<<dp[n-1]<<"\n";
}
delete arr;
return 0;
}