La mia funzione recorsiva funzionava ma dopo aver implementato la memoizzazione il secondo testcase dà 620 invece che 600 e comunque se lo carico è troppo lento, che faccio?
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("input.txt");
ofstream fout ("output.txt");
int memo[9999999][2];
bool ready[9999999][2];
int dps(int spazio,int portata,const int P[],int& N)
{
if (portata>=N){return spazio;}
int min1=999999999,min2=999999999;
//togli
if(spazio-P[portata]>=0)
{
if(ready[portata][0]){min1=memo[portata][0];}else{
min1=dps(spazio-P[portata],portata+1,P,N);
ready[portata][0]=true;
memo[portata][0]=min1;
}
}else min1=999999999;
//non togli
if(ready[portata][1]){min2=memo[portata][1];}else{
min2=dps(spazio,portata+1,P,N);
ready[portata][1]=true;
memo[portata][1]=min2;
}
return min(min1,min2);
}
int mangia(int N, int K, int P[])
{
int spazio=K;
for(int i=0;i<N;i++)
{
spazio-=P[i];
}
if(spazio<0)spazio=spazio*-1;
int diff=dps(spazio,0,P,N);
fout<<K+diff;
}
int main()
{
int N,K;fin>>N>>K;
int P[N];
for(int i=0;i<N;i++)
{
fin>>P[i];
}
mangia(N,K,P);
return 0;
}