Pranzo Della Nonna

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