Come mai mi da errato dal secondo subtask in poi? Il codice mi sembra corretto e funziona sui casi esempio più altri che ho creato personalmente. Mi dà errore di output e di tempo.
#include <iostream>
using namespace std;
#define MAXN 1000000
long long int T, N, M, K, i, j, A[MAXN], B[MAXN], soluzioni[MAXN];
long long int fib(long long int num ){
if(num==0) return 1;
else if(num==1) return 1;
else return fib(num-1)+fib(num-2);
}
struct oggetto{
long long int peso, valore;
};
oggetto oggetti[MAXN];
long long int knapsack_bottom_up(long long int num){
for(int y=0;y<N;y++){
for(int g=0;g<= M-oggetti[i].peso;g++){
if(soluzioni[g] + oggetti[y].valore > soluzioni[g+oggetti[y].peso] ){
soluzioni[g+oggetti[y].peso]=soluzioni[g]+oggetti[y].valore;
}
}
}
return soluzioni[M];
}
int main()
{
cin>>T;
long long int result[T];
cin>>N>>M;
for(i=0; i<T; i++) {
for (j=0; j<N; j++){
cin>>A[j]>>B[j];
A[j]=fib(A[j]);
oggetti[j].peso=A[j];
oggetti[j].valore=B[j];
}
for(int r = 0; r < N ; r++) soluzioni[r]=0;
result[i] = knapsack_bottom_up(M);
}
for(i=0;i<T;i++) cout<<result[i]<<endl;
}