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;
    }
    多学习,多总结。
  • 相关阅读:
    几个函数小练习
    结构体和枚举类型
    结构体
    几个函数小练习
    函数简介
    网页端滚轮滑动事件
    碰撞检测
    Ajax前后台交互函数
    事件绑定与解除js
    移动端的屏幕适配问题
  • 原文地址:https://www.cnblogs.com/yanhaiming/p/2589832.html
Copyright © 2011-2022 走看看