http://www.pipioj.online/problem.php?id=1486
思路:
d
p
dp
dp,如果商店没有连成环,那么转移公式为:
d
p
i
=
m
a
x
(
d
p
i
−
2
+
a
i
,
d
p
i
−
1
)
dp_i=max(dp_{i-2}+a_i,dp_{i-1})
dpi=max(dpi−2+ai,dpi−1)。连成环的话就是第一个和最后一个不能同时取嘛,枚举两种情况即可,转移公式不变。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=1e5+5;
int n;
int dp[maxn],a[maxn];
int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int ans=a[1];
dp[1]=0;
for(int i=2;i<=n;i++)
dp[i]=max(dp[i-1],dp[i-2]+a[i]);
ans=max(ans,dp[n]);
dp[1]=a[1];
for(int i=2;i<n;i++)
dp[i]=max(dp[i-1],dp[i-2]+a[i]);
printf("%d\n",max(ans,dp[n-1]));
}
return 0;
}