分析
一个直观的做法是,枚举前两项,不断检查前一项,这需要维护一个有序数组并且带下标(可以用一个map<int,vector<int> >,将数字相同的数推倒一个vector中,vector中存的就是相同的数的位置)
时间复杂度:O(n^2*(logn+logn))
这个做法不太行啊,两个log,有点卡不过去
由于有很多重复的枚举,dp优化
dp[i][j]:以i,j为开始两个的最大长度
转移:显然需要k且k>j的help, a[k]=a[i]+a[j] (k>j)即可(二分即可)
另一种dp[i][j]:以i,j为结束两个的最大长度
转移:需要k且k<i的help ,a[k]+a[i]==a[j](k<i)
但这个状态不太好找二分不好check
时间复杂度O(n^2*logn)