题目:大盗阿福
思路:
dp。
f[i]表示最后一个店抢劫的是i时的最大收益。
转移方程:f[i]=max(f[i-2],f[i-3])+a[i]
代码:
#include<bits/stdc++.h>
using namespace std;#define maxn 100000
#define maxm 1000
#define inf (1<<30)int n;
int a[maxn+5];
int f[maxn+5]={0};int dp(){f[1]=a[1],f[2]=a[2];for(int i=3;i<=n;i++){f[i]=max(f[i-2],f[i-3])+a[i];}return max(f[n-1],f[n]);
}int main() {int T;scanf("%d",&T);while(T--){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}int ans=dp();printf("%d\n",ans);}return 0;
}