Stavo provando a risolvere ricorsivamente questo problema, la soluzione che avevo pensato era questa: per ogni torre richiamo la funzione e poi valuto ogni volta se conviene abbattere ogni torre successiva o no, non capisco dove sbaglio
#include <iostream>
#include <fstream>
#include <algorithm>
#define MAXN 1001
using namespace std;
ifstream fin("input.txt");
ofstream fout("output.txt");
struct torre{
int peso;
int h;
};
torre vet[MAXN];
int n=0;
int cerca(int curr, int limite){
//se si puo considerare
//calcolo abbatto e nonabbatto
if(curr==n)
return 0;
//fout << curr << " "<< limite << endl;
int abbatto=0;
int nonabbatto=MAXN;
if(vet[curr].h<=limite)
{
nonabbatto=cerca(curr+1, vet[curr].h);
}
abbatto=vet[curr].peso+cerca(curr+1, limite);
if(abbatto<nonabbatto)
return abbatto;
else
return nonabbatto;
}
int main(){
fin.sync_with_stdio(false);
fin.tie(NULL);
n = 0;
fin>>n;
for(int i=0;i<n;i++){
fin>>vet[i].h>>vet[i].peso;
}
int max=0;
int mom=0;
for(int i=0;i<n;i++){
mom=cerca(i,vet[i].h);
if(mom>max)
max=mom;
}
fout << max;
return 0;
}