大盜阿福(動態規劃)

徐龍潤發表於2020-11-18

知道,在不驚動警察的情況下,他今晚最多可以得到多少現金?
輸入格式
輸入的第一行是一個整數 T(T≤50) ,表示一共有 T 組資料。
接下來的每組資料,第一行是一個整數N(1≤N≤100,000),表示一共有 N 家店鋪。
第二行是 NN 個被空格分開的正整數,表示每一家店鋪中的現金數量。每家店鋪中的現金數量均不超過 1000。
輸出格式
對於每組資料,輸出一行。
該行包含一個整數,表示阿福在不驚動警察的情況下可以得到的現金數量。
提示
對於第一組樣例,阿福選擇第 2 家店鋪行竊,獲得的現金數量為 88。對於第二組樣例,阿福選擇第 1 和 4 家店鋪行竊,獲得的現金數量為 10 + 14 = 24。
輸出時每行末尾的多餘空格,不影響答案正確性
樣例輸入
2
3
1 8 2
4
10 7 6 14
樣例輸出
8
24
每個狀態i之和他的i-2狀態和i-1狀態有關。
並且有公式dp[i]=max(dp[i-1],dp[i-2]+x(為當前輸入的值));

#include<bits/stdc++.h>

using namespace std;
const int MAXN=100010;
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		int n;
		scanf("%d",&n);
		int dp[MAXN];
		memset(dp,0,sizeof(dp));
		for(int i=1;i<=n;i++){
			int x;
			scanf("%d",&x);
			if(i==1)dp[i]=x;
			else {
				dp[i]=max(dp[i-2]+x,dp[i-1]);
			}
		}
		printf("%d\n",dp[n]);
	} 
	return 0;
}

相關文章