void solve() {
int n;cin >> n;
vi a(n);
for (int i = 0;i < n;i++) {
cin >> a[i];
}
vi dp(n + 1);
dp[0] = a[1];
dp[1] = max(a[1], a[2]);
dp[2] = max({a[1], a[2], a[3]});
for (int i = 3;i < n - 2;i++) {
dp[i] = max({ dp[i - 1],dp[i - 2],dp[i - 3] + a[i + 1] });
}
cout << dp[n - 3] << endl;
}
转移方程类似打家劫舍

京公网安备 11010502036488号