• Proud Merchants HDU


    Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerful kingdom in the world. As a result, the people in this country are still very proud even if their nation hasn’t been so wealthy any more.
    The merchants were the most typical, each of them only sold exactly one item, the price was Pi, but they would refuse to make a trade with you if your money were less than Qi, and iSea evaluated every item a value Vi.
    If he had M units of money, what’s the maximum value iSea could get?

    Input
    There are several test cases in the input.

    Each test case begin with two integers N, M (1 ≤ N ≤ 500, 1 ≤ M ≤ 5000), indicating the items’ number and the initial money.
    Then N lines follow, each line contains three numbers Pi, Qi and Vi (1 ≤ Pi ≤ Qi ≤ 100, 1 ≤ Vi ≤ 1000), their meaning is in the description.

    The input terminates by end of file marker.

    Output
    For each test case, output one integer, indicating maximum value iSea could get.

    Sample Input
    2 10
    10 15 10
    5 10 5
    3 10
    5 10 5
    3 5 6
    2 7 3
    Sample Output
    5
    11

    //很明显这一道题是用01背包写,但是又和普通的01背包不一样,因为这一道题多了一个q的限制
    
    //如果一个物品是5 9,一个物品是5 6,
    //对第一个进行背包的时候只有dp[9],dp[10],…,dp[m],
    //再对第二个进行背包的时候,如果是普通的,应该会借用前面的dp[8],dp[7]之类的,
    //但是现在这些值都是0,所以会导致结果出错.
    //(重点):于是要想到只有***后面要用的值前面都可以得到***,那么才不会出错
    
    //也就是说有两个物品A(p1,q1)和B(p2,q2)如果你想进行背包,则在这一题中必须要满足把p1实际的大小装下
    //还要满足剩下的空间够把q2装下,在进行背包的顺序中先A后B为: p1+q2,先B后A为: p2+q1,
    //则p1+q2>p2+q1,即q1-p1<q2-p2
    #include<map>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<math.h>
    #include<cstdio>
    #include<sstream>
    #include<numeric>//STL数值算法头文件
    #include<stdlib.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #include<functional>//模板类头文件
    using namespace std;
    
    const int INF=1e9+7;
    const int maxn=5100;
    typedef long long ll;
    
    int n,m;
    int dp[maxn];
    struct node
    {
        int p,q,v,t;
    } a[maxn];
    
    int cmp(node A,node B)
    {
        return A.t<B.t;
    }
    
    int main()
    {
        while(scanf("%d %d",&n,&m)!=EOF)
        {
            int i,j;
            memset(a,0,sizeof(a));
            memset(dp,0,sizeof(dp));
            for(i=0; i<n; i++)
            {
                scanf("%d %d %d",&a[i].p,&a[i].q,&a[i].v);
                a[i].t=a[i].q-a[i].p;
            }
            sort(a,a+n,cmp);
            for(i=0; i<n; i++)
            {
                for(j=m; j>=a[i].q; j--)
                {
                    dp[j]=max(dp[j],dp[j-a[i].p]+a[i].v);
                }
            }
            printf("%d
    ",dp[m]);
        }
        return 0;
    }
    
  • 相关阅读:
    如何面试前端工程师!
    CSS实现背景透明,文字不透明(各浏览器兼容)
    IE6中伪类:hover的使用及BUG
    jQuery UIdraggable参数学习
    PHP与正则表达式 2 :一些修饰符与preg_match_all
    通过apktool获取apk package name(包名)以及activity name
    jquery.ui.draggable中文文档
    无法加载php_curl.dll解决办法
    ubuntu命令查询版本和内核版本
    linux zip, unzip命令详解[ubuntu]
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/7264844.html
Copyright © 2020-2023  润新知