标签:std namespace ora turn log scanf nts -- mem
划分那个序列,没必要完全覆盖原序列。对于划分出来的每个序列,对于某个值v,要么全都在该序列,要么全都不在该序列。
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,a[5010],f[5010],fpremax[5010],num[5010],cnts[5010]; int main(){ scanf("%d",&n); for(int i=1;i<=n;++i){ scanf("%d",&a[i]); ++num[a[i]]; } for(int i=1;i<=n;++i){ int no=0,xorsum=0; memset(cnts,0,sizeof(cnts)); for(int j=i;j>=1;--j){ if(!cnts[a[j]]){ xorsum^=a[j]; ++no; } ++cnts[a[j]]; if(cnts[a[j]]==num[a[j]]){ --no; } if(!no){ f[i]=max(f[i],fpremax[j-1]+xorsum); } } fpremax[i]=max(fpremax[i-1],f[i]); } printf("%d\n",fpremax[n]); return 0; }
【动态规划】 Codeforces Round #416 (Div. 2) C. Vladik and Memorable Trip
标签:std namespace ora turn log scanf nts -- mem
原文地址:http://www.cnblogs.com/autsky-jadek/p/6914836.html