zoukankan      html  css  js  c++  java
  • 背包问题 动态规划 HDOJ1114

    /*
    题目描述:无界背包问题。给定一个背包的容量W以及n种物品的价值p[i]及重量w[i],求使背包恰好装满
    的物品价值的最大值,如不存在,则输出impossible。
    
    HDOJ 1114
    
    */
    
    #include<iostream>
    #include<vector>
    #include<assert.h>
    #include<cstring>
    using namespace std;
    
    const int N = 500+10;
    
    struct Coin
    {
        int price;
        int weight;
    };
    
    Coin coin[N];
    int f[10000+10]; //f[i]表示背包的容量为i时所能得到的最小值。
    const int INF = 10000000;
    
    int main()
    {
        
        int t = 0; //测试组数
        int n = 0; //硬币种数
        int E = 0; //储蓄罐空时的重量
        int F = 0; //储蓄罐满时的重量
        int totalWeight = 0; 
        int i = 0;
        int j = 0;
        cin>>t;
        while (t--)
        {
            cin>>E>>F;
            totalWeight = F - E;
    
            cin>>n;
            for (i=0; i<n; i++)
            {
                cin>>coin[i].price>>coin[i].weight;
            }
    
            for(i=0; i<=totalWeight; i++)
                f[i] = INF;
    
            //容量为0时硬币价值的最小值为0;
            f[0] = 0;
    
            //对每个硬币都尝试装多次。
            for (i=0; i<n; i++)
                for (j=coin[i].weight; j<=totalWeight; j++)
                {
                    if (f[j] > (f[j-coin[i].weight] + coin[i].price ) )
                    {
                        f[j] = f[j-coin[i].weight] + coin[i].price;
                    }
                    
                }
            
    
            if (f[totalWeight] == INF)
            {
                //尝试了所有硬币都不能将其恰好装满。
                cout<<"This is impossible."<<endl;
            } 
            else
            {
                cout<<"The minimum amount of money in the piggy-bank is "<<f[totalWeight]<<"."<<endl;
            }
        }
        return 0;
    }
    多学习,多总结。
  • 相关阅读:
    11. Container With Most Water
    9. Palindrome Number
    375. 猜数字大小 II leetcode java
    leetcode 72 编辑距离 JAVA
    73. 矩阵置零 leetcode JAVA
    快速排序 JAVA实现
    63. 不同路径 II leetcode JAVA
    重写(override)与重载(overload)
    62 不同路径 leetcode JAVA
    leetcode 56 合并区间 JAVA
  • 原文地址:https://www.cnblogs.com/yanhaiming/p/2589832.html
Copyright © 2011-2022 走看看