zoukankan      html  css  js  c++  java
  • HDU 1114 完全背包+判断能否装满

    题意 给出一个存钱罐里的钱币重量 给出可能的n种钱币重量以及价值 求存钱罐中钱币的最小价值 若不可能另有输出

    在裸的完全背包上加了一点东西 即判断这个背包能否被装满

    初始化 dp[0]=0 其余的都使用for循环设置成INF 以达到求min的目的

    最后如果dp[v]还是那么大就说明它根本没有通过前面的方式被改变 即 不能被装满

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<map>
    #include<math.h>
    using namespace std;
    int e,f;
    int val[505];
    int vol[505];
    int dp[10050];
    int main(){
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&e,&f);
        int v=(f-e);
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&val[i],&vol[i]);
        }
        dp[0]=0;
        for(int i=1;i<=v;i++)
        {
            dp[i]=500000000;
        }
        for(int i=1;i<=n;i++)
        {
            for(int k=vol[i];k<=v;k++)
            {
                dp[k]=min(dp[k],dp[k-vol[i]]+val[i]);
            }
        }
        if(dp[v]==500000000)
        {
            printf("This is impossible.
    ");
        }
        else printf("The minimum amount of money in the piggy-bank is %d.
    ",dp[v]);
    }
    }
    

      

  • 相关阅读:
    UVA
    UVA
    母函数
    快速排序
    集合:set
    stringstream转换
    大学期间的任务
    Devc++贪吃蛇
    Vector容器
    广度优先遍历
  • 原文地址:https://www.cnblogs.com/rayrayrainrain/p/5309210.html
Copyright © 2011-2022 走看看