總時間限制:
1000ms
內存限制:
65536kB
描述
阿福是一名經驗豐富的大盜。趁着月黑風高,阿福打算今晚洗劫一條街上的店鋪。
這條街上一共有 N 家店鋪,每家店中都有一些現金。阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街上的報警系統纔會啓動,然後警察就會蜂擁而至。
作爲一向謹慎作案的大盜,阿福不願意冒着被警察追捕的風險行竊。他想知道,在不驚動警察的情況下,他今晚最多可以得到多少現金?
輸入
輸入的第一行是一個整數 T (T <= 50) ,表示一共有 T 組數據。
接下來的每組數據,第一行是一個整數 N (1 <= N <= 100, 000) ,表示一共有 N 家店鋪。第二行是 N 個被空格分開的正整數,表示每一家店鋪中的現金數量。每家店鋪中的現金數量均不超過 1000 。
輸出
對於每組數據,輸出一行。該行包含一個整數,表示阿福在不驚動警察的情況下可以得到的現金數量。
樣例輸入
2 3 1 8 2 4 10 7 6 14
樣例輸出
8 24
提示
對於第一組樣例,阿福選擇第 2 家店鋪行竊,獲得的現金數量爲 8 。
對於第二組樣例,阿福選擇第 1 和 4 家店鋪行竊,獲得的現金數量爲 10 + 14 = 24 。
#include <iostream>
#include <algorithm>
using namespace std;
#define MAXN 100000
#define max(a,b) (((a) > (b)) ? (a) : (b))
int m_iShops[MAXN];
int m_iCashs[MAXN];
int GetMaxCash(int N)
{
return 0;
}
int main()
{
int linenum=0;
cin>>linenum;
while(linenum-->0)
{
int N,i;
cin>>N;
for(i=1;i<=N;i++)
{
cin>>m_iShops[i];
m_iCashs[i]=m_iShops[i];
}
for(i=2;i<=N;i++)
{
m_iCashs[i]=max(m_iCashs[i-2]+m_iShops[i],m_iCashs[i-1]);
}
cout<<m_iCashs[N]<<endl;
}
return 0;
}