// https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/ #include #include #include #include using namespace std; int main() { int N; cin >> N; vector valeur; for(int i = 0; i < N; i++) { int v; cin >> v; valeur.push_back(v); } int S; cin >> S; int *mintab = new int[S+1]; mintab[0] = 0; for(int i = 1; i <= S; i++) mintab[i] = numeric_limits::max(); for(int i = 1; i <= S; i++) for(int j = 0; j < N; j++) if(valeur[j] <= i && mintab[i-valeur[j]] < mintab[i]) mintab[i] = mintab[i-valeur[j]] + 1; cout << mintab[S] << endl; delete[] mintab; return 0; } // main()