程序設計與算法(二)期末考試之01:大盜阿福

總時間限制: 

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章