Stavo provando a risolvere il problema del titolo, del quale potete leggere la spiegazione a questo link
Ecco il mio algoritmo:
Passo con successo 7 dei test case, ma gli altri 10 richiedono troppo tempo per completare...
Qualche suggerimento su dove potrei ottimizzare? :S
Ecco il mio algoritmo:
C++:
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int allPermutation(const vector<int>& coins, int targetVal , int start = 0, int accumulated = 0);
int main() {
//read data
int targetVal,size;
cin >> targetVal >> size;
//build vector
vector<int> coins(size);
for(auto& c : coins){cin >> c;}
sort(coins.begin(),coins.end());
//ignore coins bigger than targetVal
auto end = find_if(coins.begin(),coins.end(),[&targetVal](int i){ return i > targetVal;});
int newSize = end - coins.begin();
coins.resize(newSize);
//find answer
cout << allPermutation(coins,targetVal);
return 0;
}
int allPermutation(const vector<int>& coins, int targetVal , int start, int accumulated)
{
if(accumulated > targetVal){return 0;}
if(accumulated == targetVal){return 1;}
int answer{};
for(int i = start; i < coins.size(); i++){
answer += allPermutation(coins, targetVal, i, accumulated + coins[i]);
}
return answer;
}
Passo con successo 7 dei test case, ma gli altri 10 richiedono troppo tempo per completare...
Qualche suggerimento su dove potrei ottimizzare? :S
Ultima modifica: