选取满足题目条件的子数组的和的最大值,每个值只属于一个子数组。
#include <iostream>
#include <unordered_map>
using namespace std;
const int N = 4 * 1e5 + 1;
int main()
{
int n;
unordered_map<int, long long> mmp;
long long ans = 0;
cin >> n;
int tmp;
for(int i = 1; i <= n; i++)
{
cin >> tmp;
mmp[tmp - i] += tmp;
if(ans < mmp[tmp - i])
ans = mmp[tmp - i];
}
cout << ans;
}
很细节,没开数组,直接用temp