题目描述
PIPI是麓山南路的地头蛇它以收店家保护费为生
麓山南路上有n家商店排成一排,PIPI为了不引起公愤,每次收完一家商店后保证不收与该商店相邻的左右两家商店的保护费~
现在告诉你每家商店内有多少现金(PIPI进入一家店就会把现金都拿走!),问你今晚PIPI最多能收到多少保护费?
输入
多组输入
第一行为一个整数n,1<=n<=100000
第二行为n个整数A1,A2…An,表示每家店内的现金。0<=Ai<=10000
输出
输出一个整数,表示最多能收到的保护费。
样例输入
5
2 5 4 1 3
样例输出
9
思路:题目中dp总共有四个状态,前面一家店选或不选,后面一家店选或不选,这里直接用四个变量代替,初始化第一个状态last_do等于第一个输入的值,然后从第二家店开始遍历
#include <bits/stdc++.h>
using namespace std;
int last_do,last_undo,now_do,now_undo;
int n;
int main()
{
while(scanf("%d",&n)!=EOF)
{
int num;
last_do=last_undo=now_do=now_undo=0;
scanf("%d",&num);
last_do=num;
for(int i=2;i<=n;i++)
{
scanf("%d",&num);
now_do=last_undo+num;
now_undo=max(last_do,last_undo);
last_do=now_do;
last_undo=now_undo;
}
printf("%d\n",max(now_do,now_undo));
}
return 0;
}