思路:
每次更新的是:以当前元素为j的最大值
那么我们用dp[i]保存当前元素对应的i(上一个元素)
再更新下一个元素时就有:
由于我们得知上一个元素为结尾的最优策略,那么以当前元素为结尾的最优策略的i要不就是i-1,要不就是dp[i-1] 然后向前更新即可!
class Solution {
public:
int dp[100005];//保存i的索引
int maxScoreSightseeingPair(vector<int>& values) {
int n=values.size();
dp[1]=0;
int ans=values[0]+values[1]-1;;
for(int i=2;i<n;i++)
{
int lasind=dp[i-1];
if(values[lasind]+values[i]+lasind-i>values[i-1]+values[i]-1)
{
dp[i]=lasind;
}
else dp[i]=i-1;
ans=max(ans,values[dp[i]]+values[i]+dp[i]-i);
}
return ans;
}
};