XDU1131 思维+dp优化

题意

分析

一个直观的做法是,枚举前两项,不断检查前一项,这需要维护一个有序数组并且带下标(可以用一个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)

猜你喜欢

转载自www.cnblogs.com/Deadline/p/8977350.html