23 大盜阿福

2021-07-30 15:41:17 字數 1153 閱讀 3133

描述

阿福是一名經驗豐富的大盜。趁著月黑風高,阿福打算今晚洗劫一條街上的店鋪。

這條街上一共有 n 家店鋪,每家店中都有一些現金。阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街上的報警系統才會啟動,然後警察就會蜂擁而至。

作為一向謹慎作案的大盜,阿福不願意冒著被警察追捕的風險行竊。他想知道,在不驚動警察的情況下,他今晚最多可以得到多少現金?

輸入輸入的第一行是乙個整數 t (t <= 50) ,表示一共有 t 組資料。

接下來的每組資料,第一行是乙個整數 n (1 <= n <= 100, 000) ,表示一共有 n 家店鋪。第二行是 n 個被空格分開的正整數,表示每一家店鋪中的現金數量。每家店鋪中的現金數量均不超過 1000 。

輸出對於每組資料,輸出一行。該行包含乙個整數,表示阿福在不驚動警察的情況下可以得到的現金數量。

樣例輸入

2

31 8 2

410 7 6 14

樣例輸出

8

24

提示對於第一組樣例,阿福選擇第 2 家店鋪行竊,獲得的現金數量為 8 。

對於第二組樣例,阿福選擇第 1 和 4 家店鋪行竊,獲得的現金數量為 10 + 14 = 24 。

題意:如果進入連續的店就會驚動**,在不驚動**的情況下,最多偷多少

分析:f[i]=max(f[i-1,f[j]+a[i]);

**:

#includeusing namespace std;

long long int a[100005],f[100005],maxn;

int main()

{ int t,k,i,j,n;

while(cin>>t)

{ for(k=0;k>n;

maxn=0;

memset(f,0,sizeof(f));

for(i=0;i>a[i];

for(i=0;i=0;j++)

f[i]=max(f[i],f[j]+a[i]);

if(i>0)

f[i]=max(f[i-1],f[i]);

if(maxn

感受:

如果乙個乙個比較容易超時,所以只能跟f[i-1]比較,保證f[i1]是前i-1個中最大的

23 大盜阿福

阿福是一名經驗豐富的大盜。趁著月黑風高,阿福打算今晚洗劫一條街上的店鋪。這條街上一共有 n 家店鋪,每家店中都有一些現金。阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街上的報警系統才會啟動,然後警察就會蜂擁而至。作為一向謹慎作案的大盜,阿福不願意冒著被警察追捕的風險行竊。他想知道,在不驚動...

8462 大盜阿福

總時間限制 1000ms 記憶體限制 65536kb 描述 阿福是一名經驗豐富的大盜。趁著月黑風高,阿福打算今晚洗劫一條街上的店鋪。這條街上一共有 n 家店鋪,每家店中都有一些現金。阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街上的報警系統才會啟動,然後警察就會蜂擁而至。作為一向謹慎作案的...

1049 大盜阿福

阿福是一名經驗豐富的大盜。趁著月黑風高,阿福打算今晚洗劫一條街上的店鋪。這條街上一共有 n 家店鋪,每家店中都有一些現金。阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街上的報警系統才會啟動,然後警察就會蜂擁而至。作為一向謹慎作案的大盜,阿福不願意冒著被警察追捕的風險行竊。他想知道,在不驚動...