Pagini recente » Diferente pentru utilizator/erebul intre reviziile 3 si 2 | Profil MihaiE | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3359181)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <climits>
#include <vector>
using namespace std;
typedef long long int ll;
const int nMax = 2e5 + 5;
int T, n;
int a[nMax], dp[nMax];
void solve()
{
int rez = 0;
dp[0] = 0,dp[1] = 0;
for (int i = 1;i <= n;i++){
if (i + a[i] > n){rez = max(rez,dp[i]+a[i]);continue;}
dp[i+a[i]] = max(dp[i+a[i]],dp[i]+a[i]);
}
cout << rez << '\n';
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> T;
while(T--){
cin >> n;
for (int i = 1;i <= n;i++)cin >> a[i],dp[i] = 0;
solve();
}
}