采用闫氏dp分析法
直接说正解吧(因为一开始定义的是二维的,F[i][j]表示从前i个商店里面选择,可得到的现金数目为j,但是在循环的时候发现j好像用不到hhhh)
每一家商店都有选和不选两种状态,而当选择这家商店的时候还需要受前面选择的影响,只能是向前推两家店铺的值再加上当前商店的价值也就是i和第i-2个商店
然后两种状态取max
package dp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class 大盗阿福 {
/**
* @param args
* @throws IOException
* @throws NumberFormatException
*/
static final int N=(int) 1e8;
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(System.in));
int t=Integer.parseInt(bufferedReader.readLine());
while(t>0){
t--;
int n=Integer.parseInt(bufferedReader.readLine());
int a[]=new int [n+3];
String pString[]=bufferedReader.readLine().split(" ");
for(int i=2;i<=n+1;i++){
a[i]=Integer.parseInt(pString[i-2]);
}
int f[]=new int [n+3];
f[0]=0;
f[1]=0;
for(int i=2;i<=n+1;i++){
f[i]=Math.max(f[i-1], f[i-2]+a[i]);
}
System.out.println(f[n+1]);
}
}
}