1、B站视频链接:E21 线性DP 大盗阿福_哔哩哔哩_bilibili
#include <bits/stdc++.h>
using namespace std;
const int N=100010;
int w[N],f[N];
int main(){
int n,t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&w[i]);
}
f[0]=0;//不偷
f[1]=w[1];//偷第一家
for(int i=2;i<=n;i++){
f[i]=max(f[i-1],f[i-2]+w[i]);
}
printf("%d\n",f[n]);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N=100010;
int w[N],f[N][2];//分类f[i][1]偷与f[i][0]不偷
int main(){
int n,t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&w[i]);
}
f[1][0]=0;
f[1][1]=w[1];
for(int i=2;i<=n;i++){
f[i][0]=max(f[i-1][0],f[i-1][1]);
f[i][1]=f[i-2][1]+w[i];
}
printf("%d\n",max(f[n][0],f[n][1]));
return 0;
}