peshopbs2

stamps с яки коментари

Dec 10th, 2016
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <iostream>
  2. #define MAXN 5000
  3. #define INFINITY 999999
  4. using namespace std;
  5.  
  6. int n, a[MAXN], solution[MAXN], s, minimum;
  7. int main() {
  8.     cin >> s >> n;
  9.    
  10.     for (int i = 0; i < n; i++) { //въвеждаме номиналите
  11.         cin >> a[i];
  12.     }
  13.    
  14.     for(int i = 1; i <= s; i++) {
  15.         solution[i] = INFINITY; //маркираме всяко решение като начална стойност +безкрайност
  16.     }
  17.    
  18.     solution[0] = 0; //markirame 0-то решение с 0, щот това е мн важно, за да бачка задачата!
  19.    
  20.     for (int i = 0; i < n; i++) { //за всеки номинал отбелязваме, че съответната сума се постига с 1 марка
  21.         solution[a[i]] = 1;
  22.     }
  23.    
  24.     for(int i = 2; i <= s; i++) { //за всека сума намираме кои са подсумите, през които може да сме минали за да стигнем нея
  25.         for(int j = 0; j < n; j++) { //тия подсуми реално идват от номиналите
  26.             if(i-a[j]>=0) { //тва е от значение, щото нямаме "отрицателни" подзадачи...
  27.                 solution[i] = min(solution[i], solution[i - a[j]] + 1); //всеки път гледаме кое е по-малко - досегашната стойност на solution[i] или решението на подзадачата + 1 (добавяме 1 щот нали като от подзадачата прескочим в новата задача добавяме още 1 марка към арсенала от марки :D)
  28.             }
  29.         }
  30.     }
  31.    
  32.     cout << solution[s] << endl; //решението накрая разбира се е в solution[s]
  33.     return 0;
  34. }
Advertisement
Add Comment
Please, Sign In to add comment