我仿照第一篇题解,根据 O(n2) 的思路加上 lstai 和前缀和优化转移。
但是这么写就错了:
lst[a[1]]=1;
fo(i,2,n+1)
{
f[i]=check(i,i-2)*a[i]+f[i-1];
if(lst[a[i]]==0)
{
lst[a[i]]=i;
continue;
}
f[i]=max(f[i],f[lst[a[i]]+1]+s[i-1]-s[lst[a[i]]]+a[i]);
lst[a[i]]=i;
}
答案会偏大。
做出如下修改就通过了此题。
+ f[i]=f[i-1];
- f[i]=check(i,i-2)*a[i]+f[i-1];
想知道为什么,是重复计算了一次贡献吗?