Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cstring>
- using namespace std;
- int N, M;
- vector< vector <int> > kovanice;
- vector <int> B, C, S, Z, P;
- int memo[1024][5];
- int rek(int sada, int zadnja) {
- if (sada < 0) {
- return 1000;
- }
- if (sada == 0) {
- return 0;
- }
- if (memo[sada][zadnja] != -1) {
- return memo[sada][zadnja];
- }
- int min = 1000;
- for (int boja = 0; boja < 5; boja++) {
- if (boja == zadnja) {
- continue;
- }
- for (int i = 0; i < kovanice[boja].size(); i++) {
- int mini = rek(sada - kovanice[boja][i], boja) + 1;
- if (mini < min) {
- min = mini;
- }
- }
- }
- memo[sada][zadnja] = min;
- return min;
- }
- int main() {
- cin >> N >> M;
- for (int i = 0; i < N; i++) {
- int x; char b;
- scanf("%d %c", &x, &b);
- if (b == 'B') {
- B.push_back(x);
- } else if (b == 'C') {
- C.push_back(x);
- } else if (b == 'S') {
- S.push_back(x);
- } else if (b == 'Z') {
- Z.push_back(x);
- } else if (b == 'P') {
- P.push_back(x);
- }
- }
- kovanice.push_back(B);
- kovanice.push_back(C);
- kovanice.push_back(S);
- kovanice.push_back(Z);
- kovanice.push_back(P);
- memset(memo, -1, sizeof(memo));
- cout << rek(M, 5) << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement