思路:用maxn表示對於A【i】來說,之前的一個最大觀光分值,res表示A【0】到A【i】的一對最大觀光分值
class Solution {
public:
int maxScoreSightseeingPair(vector<int>& A) {
int res = 0;
int maxn = A[0];
for(int i = 1;i < A.size();i++){
//因爲距離,需要減一
maxn--;
res = max(A[i]+maxn,res);
//判斷是否更新maxn
maxn = max(A[i],maxn);
}
return res;
}
};
思路差不多的另一種解法:
class Solution {
public:
int maxScoreSightseeingPair(vector<int>& A) {
int res = 0;
int maxn = A[0];
for(int i = 1;i < A.size();i++){
res = max(A[i]+maxn-i,res);
maxn = max(A[i]+i,maxn);
}
return res;
}
};