题目描述
解题思路
int solve(){
long long** dp = new long long*[n];
for(int i=0; i<n; i++){
dp[i] = new long long[2];
// dp[i][0]: 不取a[i]时,前i个数的最大不相邻数字和
// dp[i][1]: 取了a[i]时,前i个数的最大不相邻数字和
}
// init
dp[0][0] = 0;
dp[0][1] = a[0];
// bottom-up calc
for(int i=1; i<n; i++){
dp[i][0] = max(dp[i-1][0], dp[i-1][1]);
dp[i][1] = dp[i-1][0] + a[i];
}
return max(dp[n-1][0], dp[n-1][1]);
}