• 背包----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;
    }
    


  • 相关阅读:
    Centos7 安装python3 pip3
    VMW14.x虚拟机安装Mac10.13系统教程
    ADB命令大全
    appium服务器参数
    虚拟机VM14.X安装Mac10.12启动出现问题的解决方法
    Centos7安装vscode
    jmeter接口测试多数据组合登陆场景
    appium环境安装
    mysql命令大全
    jmeter录制请求
  • 原文地址:https://www.cnblogs.com/wyboooo/p/9643460.html
Copyright © 2020-2023  润新知