zoukankan      html  css  js  c++  java
  • hdu acm 1114 Piggy-Bank 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114

    题目意思:给出一个空的猪仔钱ang 的重量E,和一个装满钱的猪仔钱ang 的重量F你,实质上能装入得钱的重量就是F - E。接着有n 种币种,每个币种有两个属性刻画:面值 + 重量。问恰好装满(注意关键词: 恰好)后,需要的钱的最少数量所对应的钱是多少(有点拗口= =。)拿第一组数据来说,

      10 110

      2

      1 1

      30 50

         我们当然是用两张30 来填满这个只能装100重量的罐啦,如果都用面值为1的货币来装,就需要100张了,显然不够2张好啦。

         好啦,回归正题,这道题是完全背包的题目。初始化dp 数组的 INF 一定要好大好大~~~否则会....wa !

         有学过的应该都不陌生,如果也像我那样才刚接触,就可以看看dd 大牛(其实我也不知道是谁来滴)的 背包九讲

         或者队长给的:http://love-oriented.com/pack/pack2rc.pdf  (这人...不知道是不是dd 大牛)

         这个是我看得最懂的(反正我是比较笨啦):http://wenku.baidu.com/link?url=yHMBToaaKpk8mRFn0aCCcq02MTyCIjGQ8npyI-XDfkAvkLqNRKpxLkNnJf0s3l-XdZK99XwQZiEZ6hqxFt0WZbRMu3ZaNxdE-1o0ZI4ssq3

          还有一个很重要的地方,初始化!!注意是恰好装满,也就不能用 0 来初始化dp 数组,而要用 INF。(dd大牛是有写的,看了还是不太懂为什么这样)

         

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 const int maxn = 1e4 + 10;
     7 const int INF = 100000000;    // 这个INF一定要好大好大好大!!!!
     8 
     9 int w[maxn], v[maxn];
    10 int dp[maxn];
    11 
    12 int main()
    13 {
    14     int T, n, m, E, F;
    15     while (scanf("%d", &T) != EOF)
    16     {
    17         while (T--)
    18         {
    19             scanf("%d%d", &E, &F);
    20             int Maxweight = F - E;
    21             scanf("%d", &n);
    22             for (int i = 0; i < n; i++)
    23                 scanf("%d%d", &v[i], &w[i]);
    24             for (int i = 1; i <= Maxweight; i++)
    25                 dp[i] = INF;
    26             dp[0] = 0;
    27             for (int i = 0; i < n; i++)
    28             {
    29                 for (int j = w[i]; j <= Maxweight; j++)
    30                 {
    31                     dp[j] = min(dp[j], dp[j-w[i]]+v[i]);  // 选取币值最少的
    32                 }
    33             }
    34             if (dp[Maxweight] != INF)
    35                 printf("The minimum amount of money in the piggy-bank is %d.
    ", dp[Maxweight]);
    36             else
    37                 printf("This is impossible.
    ");
    38         }
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    HDU 1269 迷宫城堡
    HDU 4771 Stealing Harry Potter's Precious
    HDU 4772 Zhuge Liang's Password
    HDU 1690 Bus System
    HDU 2112 HDU Today
    HDU 1385 Minimum Transport Cost
    HDU 1596 find the safest road
    HDU 2680 Choose the best route
    HDU 2066 一个人的旅行
    AssetBundle管理机制(下)
  • 原文地址:https://www.cnblogs.com/windysai/p/3885084.html
Copyright © 2011-2022 走看看