题解 | #购物单#

购物单

https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4

/*
    第一次尝试,想错了、

#include <iostream>
#include <queue>
using namespace std;


int dp[65];
int v[65],w[65],value[65],q[65];
int vis[65];

class goods{
    public:
    int value,q;
    bool vis;
    int num;
    goods(int v,int q,bool vis,int num):value(v),q(q),vis(vis),num(num){};

    friend bool operator<(goods a,goods b){
        return a.value < b.value;
    }
};


priority_queue<goods> res;

void init(){

        fill(v,v+65,0);
        fill(w,w+65,0);
        fill(value,value+65,0);
        fill(q,q+65,0);
        fill(vis,vis+65,0);
        while(!res.empty()){
            res.pop();
        }
}

int main() {
    int n,m;
    while (cin >> n >> m) { // 注意 while 处理多个 case

        init();
        for(int i=0;i<m;i++){
            cin>>v[i]>>w[i]>>q[i];
            value[i] = v[i] * w[i];
            int num = q[i] == 0?i+1:0;
            goods tmp(value[i],q[i],vis[i],num);
            res.push(tmp);
        }
        while(!res.empty()){
            goods tmp = res.top();
            res.pop();
            cout<<tmp.num<< ' '<<tmp.value<<' '<<tmp.q<<' '<<tmp.vis<<endl;
        }

        while(n>=0 || !res.empty()){
             
        }


    }
    return 0;
}
// 64 位输出请用 printf("%lld")

*/






#include<iostream>
#include <vector>
using namespace std;

int main(){
    int N,M;
    cin>>M>>N;
    M/=10;
    vector<vector<int>> price(N+1,vector<int>(3,0));
    vector<vector<int>> value(N+1,vector<int>(3,0));
    for(int i=1;i<=N;i++){
        int v,p,q;
        cin>>v>>p>>q;
        if(q == 0){
            price[i][0] = v/10;
            value[i][0] = p; 
        }
        else {
            if(price[q][1] !=0){
                price[q][2] = v/10;
                value[q][2] = p;
            }
            else {
                price[q][1] = v/10;
                value[q][1] = p;
            }
        }    
    }
    vector<vector<int>> dp(N+1,vector<int>(M+1,0));
    for(int i=1;i<=N;i++){
        for(int j=1;j<=M;j++){


            int a = price[i][0],b=value[i][0];
            int c = price[i][1],d=value[i][1];
            int e = price[i][2],f=value[i][2];
            
            dp[i][j] = j>=a?max(dp[i-1][j-a] + a*b ,dp[i-1][j]):dp[i-1][j];
            dp[i][j] = j>=(a+c)?max(dp[i-1][j-a-c] + a*b + c*d,dp[i][j]):dp[i][j];
            dp[i][j] = j>=(a+e)?max(dp[i-1][j-a-e] + a*b + e*f,dp[i][j]):dp[i][j];
            dp[i][j] = j>=(a+c+e)?max(dp[i-1][j-a-c-e] + a*b + c*d + e*f,dp[i][j]):dp[i][j];
        }
    }
    
    cout<<dp[N][M]*10<<endl;

    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务