#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int n,t;
int home[N];
int mem[N];
//x表示当前在哪家位置
int dfs(int x){//记忆化搜索
if(mem[x]) return mem[x];
int sum=0;
if(x>n) sum=0;
else sum= max(dfs(x+1),dfs(x+2)+home[x]);//这里是因为一家店铺有抢和不抢两种选择
//你要从中寻找到经济较高的那一种如果你抢x那你下一部只能去
//抢x+2
mem[x]=sum;
return sum;
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&home[i]);
memset(mem,0,sizeof(mem));
int res=dfs(1);
printf("%d\n",res);
}
return 0;
}
//递推dp
//for(int i=n;i>=1;i--){
// f[i]=max(f[i+1],f[i+2]+home[i]);
//}
//
//
//
//
1149大盗阿福(dfs,dp,记忆化搜索
于 2024-03-07 16:21:53 首次发布