Kaidul

Making Change

Jul 6th, 2013
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.96 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cctype>
  4. #include <cmath>
  5. #include <complex>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include <ctime>
  10. #include <deque>
  11. #include <fstream>
  12. #include <iostream>
  13. #include <list>
  14. #include <climits>
  15. #include <map>
  16. #include <memory>
  17. #include <queue>
  18. #include <set>
  19. #include <sstream>
  20. #include <stack>
  21. #include <string>
  22. #include <utility>
  23. #include <vector>
  24. #include <iomanip>
  25. using namespace std;
  26. /*** typedef ***/
  27. #define MEMSET_INF 127
  28. #define MEMSET_HALF_INF 63
  29. #define stream istringstream
  30. #define rep(i,n) for(__typeof(n) i=0; i<(n); i++)
  31. #define repl(i,n) for(__typeof(n) i=1; i<=(n); i++)
  32. #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
  33. #define INF (1<<30)
  34. #define PI acos(-1.0)
  35. #define pb push_back
  36. #define ppb pop_back
  37. #define all(x) x.begin(),x.end()
  38. #define mem(x,y) memset(x,y,sizeof(x))
  39. #define memsp(x) mem(x,MEMSET_INF)
  40. #define memdp(x) mem(x,-1)
  41. #define memca(x) mem(x,0)
  42. #define eps 1e-9
  43. #define pii pair<int,int>
  44. #define pmp make_pair
  45. #define ft first
  46. #define sd second
  47. #define vi vector<int>
  48. #define vpii vector<pii>
  49. #define si set<int>
  50. #define msi map<string , int >
  51. #define mis map<int , string >
  52. typedef long long i64;
  53. typedef unsigned long long ui64;
  54. /** function **/
  55. #define SDi(x) sf("%d",&x)
  56. #define SDl(x) sf("%lld",&x)
  57. #define SDs(x) sf("%s",x)
  58. #define SD2(x,y) sf("%d%d",&x,&y)
  59. #define SD3(x,y,z) sf("%d%d%d",&x,&y,&z)
  60. #define pf printf
  61. #define print(x) pf("%d ", x)
  62. #define println(x) pf("%d\n", x)
  63. #define sf scanf
  64. #define READ(f) freopen(f, "r", stdin)
  65.  
  66. #define M 7
  67. #define Max 200
  68.  
  69. int amount, optimal, dp[Max];
  70.  
  71. struct coin {
  72.     int value, quantity;
  73.     coin() {}
  74.     coin(int a, int b) {
  75.         value = a, quantity = b;
  76.     }
  77. } coins[M];
  78.  
  79. int minChange(int n) {
  80.     for(int i = M - 2; i >= 0; i--) {
  81.         if(n >= coins[i].value) {
  82.             return 1 + minChange(n - coins[i].value);
  83.         }
  84.     }
  85.     return 0;
  86. }
  87.  
  88. int main() {
  89. #ifndef ONLINE_JUDGE
  90.     READ("input.txt");
  91. #endif
  92.     int coinsValue[] = {1, 2, 4, 10, 20, 40};
  93.     double price;
  94.     int quantity, sum;
  95.     while(true) {
  96.         sum = 0, optimal = INF;
  97.         rep(i, M - 1) SDi(quantity), coins[i] = coin(coinsValue[i], quantity), sum += quantity;
  98.         if(sum == 0) break;
  99.         cin >> price;
  100.         amount = ( price + eps ) * 20;
  101.  
  102.         rep(i, Max) dp[i] = INF;
  103.         dp[0] = 0;
  104.  
  105.         rep(i, M - 1) {
  106.             while(coins[i].quantity) {
  107.                 for(int j = Max - coins[i].value - 1; j >= 0; j--) {
  108.                     if(dp[j] != INF ) {
  109.                         dp[j + coins[i].value] = min( dp[j] + 1, dp[j + coins[i].value] );
  110.                     }
  111.                 }
  112.                 coins[i].quantity--;
  113.             }
  114.         }
  115.  
  116.         for(int i = amount; i < Max; i++) {
  117.             optimal = min( optimal, dp[i] + minChange(i - amount) );
  118.         }
  119.  
  120.         pf("%3d\n", optimal );
  121.     }
  122.     return 0;
  123. }
Advertisement
Add Comment
Please, Sign In to add comment