Aiuto per problema torri

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;
}

Dal codice è difficile capire cosa vuoi fare, puoi scrivere l’algoritmo a parole?

In ogni caso la strada giusta è la ricorsione (usando la programmazione dinamica).

Richiamo la funzione per ogni torre poi per ogni torre successiva mi calcolo se conviene abbatterla o non abbatterla (in dei casi sei obbligatorio abbatterla) e alla fine stampo il minore

Niente ho risolto :slight_smile: