重点:可以反转一个区间代表着可以将任意两个连续的区间拼接在一起那么我们就转化为找到两个区间没有交集,他们的和最大。可以用dp【i】来表示最后一个数为a【i】的所能组成一段的最大值,我们可以从i位暴力往前找,最多找到23个数就会出现交集。然后进行sosdp(不难的,学一下)找到每个数的子集的最大值,然后暴力求解。int dp[maxn];int sos[maxn];int a[maxn];int main(){ int n; while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) { ...