# Aiuto per problema torri

**URL:** <https://forum.olinfo.it/t/aiuto-per-problema-torri/4342>\
**Category:** Aiuto\
**Created:** [22 Gennaio 2017, 6:54pm UTC](https://forum.olinfo.it/t/aiuto-per-problema-torri/4342 "2017-01-22T18:54:27Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![dario.amadori](https://forum.olinfo.it/user_avatar/forum.olinfo.it/dario.amadori/32/427_2.png) [@dario.amadori](https://forum.olinfo.it/u/dario.amadori)\
**Post date:** [22 Gennaio 2017, 6:54pm UTC](https://forum.olinfo.it/t/aiuto-per-problema-torri/4342/1 "2017-01-22T18:54:27Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![doublechar14](https://forum.olinfo.it/user_avatar/forum.olinfo.it/doublechar14/32/426_2.png) [@doublechar14](https://forum.olinfo.it/u/doublechar14)\
**Post date:** [23 Gennaio 2017, 6:43pm UTC](https://forum.olinfo.it/t/aiuto-per-problema-torri/4342/2 "2017-01-23T18:43:05Z")

</div>

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).

---

<div class="post-metadata">

**Author:** ![dario.amadori](https://forum.olinfo.it/user_avatar/forum.olinfo.it/dario.amadori/32/427_2.png) [@dario.amadori](https://forum.olinfo.it/u/dario.amadori)\
**Post date:** [23 Gennaio 2017, 7:34pm UTC](https://forum.olinfo.it/t/aiuto-per-problema-torri/4342/3 "2017-01-23T19:34:09Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![dario.amadori](https://forum.olinfo.it/user_avatar/forum.olinfo.it/dario.amadori/32/427_2.png) [@dario.amadori](https://forum.olinfo.it/u/dario.amadori)\
**Post date:** [23 Gennaio 2017, 7:56pm UTC](https://forum.olinfo.it/t/aiuto-per-problema-torri/4342/4 "2017-01-23T19:56:25Z")

</div>

Niente ho risolto 🙂
