zoukankan      html  css  js  c++  java
  • poj1787 Charlie's Change

    思路:

    完全背包,记录路径。

    实现:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int INF = 0x3f3f3f3f;
     4 int v[4] = {1, 5, 10, 25};
     5 int c[4], m;
     6 int dp[10005], used[10005], path[10005];
     7 int main()
     8 {
     9     while (cin >> m >> c[0] >> c[1] >> c[2] >> c[3], m || c[0] || c[1] || c[2] || c[3])
    10     {
    11         memset(used, 0, sizeof used);
    12         memset(path, 0, sizeof path);
    13         path[0] = -1;
    14         for (int i = 0; i <= m; i++) dp[i] = -INF;
    15         dp[0] = 0;
    16         for (int i = 0; i < 4; i++)
    17         {
    18             memset(used, 0, sizeof used);
    19             for (int j = v[i]; j <= m; j++)
    20             {
    21                 if (dp[j - v[i]] != -INF && dp[j - v[i]] + 1 > dp[j] && used[j - v[i]] < c[i])
    22                 {
    23                     dp[j] = dp[j - v[i]] + 1;
    24                     used[j] = used[j - v[i]] + 1;
    25                     path[j] = j - v[i];
    26                 }
    27             }
    28         }
    29         if (dp[m] <= -INF) { cout << "Charlie cannot buy coffee." << endl; }
    30         else 
    31         {
    32             int ans[26]; memset(ans, 0, sizeof ans);
    33             while (path[m] != -1)
    34             {
    35                 ans[m - path[m]]++;
    36                 m = path[m];
    37             }
    38             cout << "Throw in " << ans[v[0]] << " cents, " << ans[v[1]] << " nickels, " << ans[v[2]] << " dimes, and " << ans[v[3]] << " quarters." << endl;
    39         }
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    hdu2795-Billboard(线段树应用好题)
    AC自动机模板
    kmp模板
    字符串Hash模板
    (可持久化)带修莫队的实现方法
    HZNU1544众数问题
    NOIP2006提高组第二题-金明的预算方案
    Python学习笔记
    (模板)唯一分解定理
    Java 7 源码学习系列(二)——Enum
  • 原文地址:https://www.cnblogs.com/wangyiming/p/7536465.html
Copyright © 2011-2022 走看看