Hola, estoy resolviendo este problema.
Mi idea es la siguiente:
Primero, me fijo hasta qué ubicación puedo llegar desde mi posición actual, sin recargar batería en ninguna estación. Al mismo tiempo, me fijo cual es la estación en el rango [posición actual+1;hasta cuál puedo llegar] que más me conviene (esta es la que maximiza la suma de su ubicación y la recarga de la batería que se puede hacer en ella). Luego, hago lo mismo, pero ahora mi posición actual es la estación que más me conviene en el rango anteriormente nombrado.
Dejo el código:
Código
#include <vector>
#include <iostream>
using namespace std;
typedef long long tint;
vector<int> electromovil(int E, vector<int> ubicacion, vector<int> autonomia)
{
vector<int> ret;
int bat = autonomia[0];
int posAct = 0;
int pos = 0, maxi = 0;
for(int i=(posAct+1);i<E;i++){
if(ubicacion[i] > posAct+bat){
ret.push_back(ubicacion[pos]);
posAct = pos;
bat = autonomia[pos];
maxi = 0;
pos = 0;
}else{
if(ubicacion[i]+autonomia[i] > maxi){
maxi = ubicacion[i]+autonomia[i];
pos = i;
}
}
}
return ret;
}
Sin embargo, esta solución no funciona, ya que si corro el siguiente ejemplo:
10
0 300
100 800
300 300
700 200
800 400
900 200
1100 500
1200 400
1600 400
2000 8192
el output es el siguiente:
6
100
800
0
0
0
0
Alguien podría decirme dónde está el error en mi solución?