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