zoukankan      html  css  js  c++  java
  • 背包----Proud merchants

    一件物品p,q,v 分别表示物品的价格,钱少于q时就不能买,和物品的价值

    n表示物品数量,m表示初始有的钱

    问最多能买多少东西


    01背包

    注意点是,因为有一个q作为限制条件,所以n件物品不是随意选的了,要考虑先后顺序

    于是排序,前面选择的物品要让后面选择的物品可以被选 也就是说p1 + q2 > p2 + q1,(选择的余地更大)也就是p1 - q1  > p2 - q2

    #include<stdio.h>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<stack>
    #define inf 1000000000
    using namespace std;
    
    int n,m;
    struct node{
        int p,q,v;
    }w[505];
    int dp[5005],mon[5005];
    
    bool cmp(node a, node b)
    {
        return a.q - a.p < b.q - b.p;
    }
    
    int main()
    {
        while(scanf("%d%d",&n,&m) != EOF){
            for(int i = 0; i < n; i++){
                scanf("%d%d%d",&w[i].p,&w[i].q,&w[i].v);
                //dp[i] = 0;
                //mon[i] = m;
            }
            for(int i = 0; i <= m; i++){
                //mon[i] = m;
                dp[i] = 0;
            }
            dp[0] = 0;
            sort(w, w + n, cmp);
    
            for(int i = 0; i < n; i++){
                for(int j = m; j >= w[i].q; j--){
                    if(dp[j] < dp[j - w[i].p] + w[i].v){
                        dp[j] = dp[j - w[i].p] + w[i].v;
                        //mon[j] -= w[i].p;
                    }
                }
            }
    
            printf("%d
    ",dp[m]);
        }
        return 0;
    }
    


  • 相关阅读:
    确定机器上装有哪些.net framework版本
    C#中的私有构造函数
    突破vs2008 RTM90天使用限制(转)
    圣诞晚会串词(转)
    C#中ref和out
    登缙云山随笔
    质量百分百
    自然界五种长有人脸像的怪异生物
    C# 静态构造函数
    NET环境下基于Ajax的MVC方案
  • 原文地址:https://www.cnblogs.com/wyboooo/p/9643460.html
Copyright © 2011-2022 走看看