Ciao a tutti,ho tentato di risolvere il problema delle interrogazioni ordinate utilizzando(almeno penso di utilizzare) la tecnica della programmazione dinamica detta “bottom up manner”.Purtroppo riesco ad ottenere solamente 50/100.Qualcuno può darmi un consiglio su come migliorare il mio algoritmo ?Perchè nella subtask 3 mi dà l’errore di “execution timed out”?
Questo è il codice
#include<stdio.h>
#include<assert.h>
int soluzioni[200000];
int i,j;
int last = 0;
int lastV = 0;
void swap(int *a,int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int posizione = 0;
int start = 0;
int interr(int N,int num[])
{
for(i=1;i<N;i++)
{
for(j=0;j<i;j++)
{
if(num[i] < num[j])
{
soluzioni[i+1] = soluzioni[lastV] + 1;
lastV = i+1;
swap(&num[i],&num[j]);
start = 0;
}
else start = 1;
}
if (start == 1) posizione++;
else {
if (posizione == 0) posizione = 0;
else posizione--;
}
}
return soluzioni[N];
}
int main()
{
int n;
int numeri[200000];
FILE *fr;
FILE *fw;
fr = fopen("input.txt","r");
fw = fopen("output.txt","w");
assert(1 == fscanf(fr,"%d\n",&n));
for(i = 0;i<n;i++) {
assert(1 == fscanf(fr, "%d ", &numeri[i]));
}
fprintf(fw,"%d\n",interr(n,numeri));
fclose(fr);
fclose(fw);
return 0;
}