Codeforces Ronda # 693 (Div.3) C. Saltos de longitud

Polycarp encontró debajo del árbol de Navidad una serie de n elementos e instrucciones para jugar con él:

Al principio, elija el índice i (1≤i≤n) - posición inicial en la matriz. Ponga la ficha en el índice i (en el valor ai).
Mientras i≤n, agregue ai a su puntaje y mueva las posiciones de la ficha ai hacia la derecha (es decir, reemplace i con i + ai).
Si i> n, Polycarp finaliza el juego.
Por ejemplo, si n = 5 y a = [7,3,1,2,3], entonces son posibles las siguientes opciones de juego:

Policarpo elige i = 1. Proceso de juego: i = 1⟶ + 78. La puntuación del juego es: a1 = 7.
Policarpo elige i = 2. Proceso de juego: i = 2⟶ + 35⟶ + 38. La puntuación del juego es: a2 + a5 = 6.
Policarpo elige i = 3. Proceso de juego: i = 3⟶ + 14⟶ + 26. La puntuación del juego es: a3 + a4 = 3.
Policarpo elige i = 4. Proceso de juego: i = 4⟶ + 26. La puntuación del juego es: a4 = 2.
Policarpo elige i = 5. Proceso de juego: i = 5⟶ + 38. La puntuación del juego es: a5 = 3.
Ayuda a Policarpo a averiguar la puntuación máxima que puede obtener si elige el índice inicial de forma óptima.

Entrada
La primera línea contiene un número entero t (1≤t≤104) - el número de casos de prueba. Luego siguen t casos de prueba.

La primera línea de cada caso de prueba contiene un número entero n (1≤n≤2⋅105) - la longitud de la matriz a.

La siguiente línea contiene n números enteros a1, a2,…, an (1≤ai≤109) - elementos de la matriz a.

Se garantiza que la suma de n en todos los casos de prueba no supere 2⋅105.

Salida
Para cada caso de prueba, envíe en una línea separada un número: la puntuación máxima que puede obtener Policarpo jugando el juego en la matriz correspondiente de acuerdo con las instrucciones de la declaración. Tenga en cuenta que Policarpo elige cualquier posición inicial de 1 an de tal manera que maximice su resultado.

Ejemplo
inputCopy
4
5
7 3 1 2 3
3
2 1 4
6
2 1000 2 3 995 1
5
1 1 1 1 1
outputCopy
7
6
1000
5
Nota
El primer caso de prueba se explica en la declaración.

En el segundo caso de prueba, la puntuación máxima se puede lograr eligiendo i = 1.

En el tercer caso de prueba, la puntuación máxima se puede lograr eligiendo i = 2.

En el cuarto caso de prueba, la puntuación máxima se puede lograr eligiendo i = 1.
Procese la matriz al revés y vea cuántas veces el número en la posición actual de la matriz se puede aumentar para que sea mayor que n

#include<map>
#include<stack>
#include<queue>
#include<string>
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define ls (k<<1)
#define rs (k<<1|1)
#define pb push_back
#define mid ((l+r)>>1)
#include<bits/stdc++.h>
using namespace std;
const int p=1e4+7;
const int mod=1e9+7;
const int maxn=1e6+1;
typedef long long ll;
const int inf=0x3f3f3f3f;
int a[maxn],b[maxn];
void solve(){
    
    
    int t;
    cin>>t;
    while(t--)
    {
    
    
        int n;
        cin>>n;
        for(int i=1;i<=2*n;i++)
            a[i]=0;
        for(int i=1;i<=n;i++){
    
    
            cin>>a[i];
        }
        int maxx=0;
        for(int i=n;i>=1;i--){
    
    
            if(a[i]+i<=n)
                a[i]=a[a[i]+i]+a[i];
            maxx=max(a[i],maxx);
        }
        cout<<maxx<<endl;
    }
}
 
signed main()
{
    
    
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	solve();
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_45891413/article/details/112297900
Recomendado
Clasificación