zoukankan      html  css  js  c++  java
  • 杭电1114 完全背包

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

    题目大意:有一个存钱罐,给出它的重量和装满硬币的重量,然后给出里面装的硬币的种类数,并给出每种硬币的面值和重量,求在给定重量的条件下硬币的最小价值。 
    解题思路:完全背包。根据《背包九讲》,这道题目相当于要求必须装满给出的重量,因此要使dp[0]=0,同时因为求的是最小值,因此其他位置应该是正无穷。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <cstdlib>
     6 #include <cmath>
     7 #include <set>
     8 #include <map>
     9 #include <vector>
    10 #define INF 0x3f3f3f3f
    11 using namespace std;
    12 
    13 int dp[10010], w[510], v[510];
    14 int min(int a, int b)
    15 {
    16     return a < b ? a : b;
    17 }
    18 int main()
    19 {
    20     int t, e, f, W, i, j, n;
    21     scanf("%d", &t);
    22     while(t--)
    23     {
    24         scanf("%d%d", &e, &f);
    25         W = f - e;
    26         scanf("%d", &n);
    27         for(i = 1; i <= n; i++)
    28             scanf("%d %d", v + i, w + i);
    29         for(i = 1; i <= W; i++)
    30             dp[i] = INF;
    31         dp[0] = 0;
    32         for(i = 1; i <= n; i++)
    33         {
    34             for(j = w[i]; j <= W; j++)
    35             {
    36                 dp[j] = min(dp[j], dp[j - w[i]] + v[i]);
    37             }
    38         }
    39         if(dp[W] == INF)
    40             printf("This is impossible.
    ");
    41         else
    42             printf("The minimum amount of money in the piggy-bank is %d.
    ", dp[W]);
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    $NOIP2012$ 题解报告
    $NOIP2011$ 题解报告
    $NOIP2007$ 题解报告
    $NOIP2006$ 题解报告
    $NOIP2005$ 题解报告
    $NOIP2003$ 题解报告
    $NOIP2002$ 题解报告
    $NOIP2001$ 题解报告
    $NOIP2000$ 题解报告
    $NOIP1999$ 题解报告
  • 原文地址:https://www.cnblogs.com/luomi/p/5463247.html
Copyright © 2011-2022 走看看