Sushi primo subtask

Buongiorno, stavo provando a fare truffa al sushi, ed anche se il mio algoritmo dà risultati corretti negli esempi, nel primo subtask li dà comunque sbagliati, perche?

#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <bits/stdc++.h>
using namespace std;

vector<int> memo[10000]{};
vector<int> solveSushi(int N, int B, queue<int> A){
	if (memo[B].size() != 0 && memo[B].size() < 10000)
		return memo[B];
	if (B == 0) return vector<int>{};
	if (B < 0) return vector<int>{-1};

	for (int i = 0; i < N; i++){
		int n = A.front();
		A.pop();
		A.push(n);
		vector<int> remainderResult = solveSushi(N, B-n, A);
		if (remainderResult.size() == 0 || remainderResult[0] != -1){
			remainderResult.push_back(n);
			memo[B] = remainderResult;
			return memo[B];
		}
	}
	memo[B] = vector<int>{-1};
	return memo[B];
}

int sushi(int N, int B, vector<int> A){
    int size = A.size();
    sort(A.begin(), A.end());
    queue<int> AQueue;
    for (int i = 0; i < size; i++)
        AQueue.push(A[i]);
	vector<int> res = solveSushi(N, B, AQueue);
	int arr[100000];
	int max;
	size = res.size();
	if (size == 1 && res[0] == -1)
		return -1;
	for (int i = 0; i < size; i++){
		arr[res[i]] += 1;
		if (arr[res[i]] > max)
			max = arr[res[i]];
	}
	return max;
}