题目:大盗阿福
思路:
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;
}