10/100 Missioni segrete

#include<stdio.h>
//#include<stdlib.h>

#define durata 0
#define scadenza 1

#define usati 0
#define fatte 1

int main() {
	FILE *f = fopen("input.txt", "r");
	int N;
	fscanf(f, "%d", &N);
	int missioni[100][2];
	for (int i = 0; i < N; ++i)
		for (int j = 0; j < 2; ++j)
			fscanf(f, "%d", &missioni[i][j]);
	fclose(f);
	int sol[100][2];
	sol[0][usati] = missioni[0][durata];
	sol[0][fatte] = 1;
	for (int i = 1; i < N; ++i)
		for (int j = 0; j < 2; ++j)
			sol[i][j] = 0;
	for (int i = 1; i < N; ++i)
		for (int j = 0; j < i; ++j)
			if (sol[j][usati] + missioni[i][durata] <= missioni[i][scadenza] && sol[j][fatte] + 1 > sol[i][fatte] ||
				sol[j][fatte] + 1 == sol[i][fatte] && sol[j][usati] + missioni[i][durata] < sol[i][usati]){
					//printf("Aggiorno (i = %d, j = %d)\n", i, j);
					//printf("%d + %d <= %d && %d + 1 > %d || %d + 1 == %d && %d + %d < %d\n", sol[j][usati], missioni[i][durata], missioni[i][scadenza], sol[j][fatte], sol[i][fatte],
						//sol[j][fatte], sol[i][fatte], sol[j][usati], missioni[i][durata], sol[i][usati]);
					sol[i][usati] = sol[j][usati] + missioni[i][durata];
					sol[i][fatte] = sol[j][fatte] + 1;
			} 
	f = fopen("output.txt", "w");
	fprintf(f, "%d", sol[N - 1][fatte]);
	fclose(f);
	//system("PAUSE");
	return 0;
}

Codice in C.
Funzionano il testcase 2 e l’esempio proposto dal testo (non so se siano gli stessi).
Nel restante 90% dei casi mi dà “output errato”.

Grazie in anticipo!

Prova a svolgerlo in TopDown, si risolve in una maniera piĂą intuitiva e semplicissima da implementare

Lo farò, grazie; immagino che pure le soluzioni ufficiali lo propongano.
Idee sul perchè questo non funzioni?

Mi spiace ma non sono pratico con la bottom-up, questo esercizio l’ho fatto al primo tentativo con la topdown :confused:

1 Mi Piace