zoukankan      html  css  js  c++  java
  • 洛谷P1064--金明的预算方案(简单背包)

    https://www.luogu.org/problemnew/show/P1064

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    int n,m;
    int dp[100008];
    int v[65],p[65];
    vector<int> appv[65],appp[65];
    int main(){
        cin>>n>>m;
        for(int i=1;i<=m;i++){
            int a,b,c;
            cin>>a>>b>>c;
            if(!c){
                v[i]=a;
                p[i]=b;
            }
            else{
                appv[c].push_back(a);
                appp[c].push_back(b);
            }
        }
        for(int i=1;i<=m;i++){
            if(p[i]!=0){
                for(int j=n;j>=v[i];j--){
                    dp[j]=max(dp[j],dp[j-v[i]]+v[i]*p[i]);
                    if(appv[i].size()==1){
                        if(j>=appv[i][0]+v[i]){
                            dp[j]=max(dp[j],dp[j-appv[i][0]-v[i]]+appv[i][0]*appp[i][0]+v[i]*p[i]);
                        }
                    }
                    else if(appv[i].size()==2){
                        if(j>=appv[i][0]+v[i]+appv[i][1]){
                            dp[j]=max(dp[j],dp[j-appv[i][0]-v[i]-appv[i][1]]+appv[i][0]*appp[i][0]+v[i]*p[i]+appv[i][1]*appp[i][1]);
                        }
                        if(j>=appv[i][0]+v[i]){
                            dp[j]=max(dp[j],dp[j-appv[i][0]-v[i]]+appv[i][0]*appp[i][0]+v[i]*p[i]);
                        }
                        if(j>=appv[i][1]+v[i]){
                            dp[j]=max(dp[j],dp[j-appv[i][1]-v[i]]+appv[i][1]*appp[i][1]+v[i]*p[i]);
                        }
                    }
                }
            }
        }
        cout<<dp[n]<<endl;
        return 0;
    }
  • 相关阅读:
    oracle 的exists 的用法
    linux
    C++纯虚函数
    C++ 的虚析构函数
    C++ new
    C++点和箭头操作符用法区别
    static
    关于C的int
    互斥量mutex的简单使用
    nginx服务器屏蔽上游错误码
  • 原文地址:https://www.cnblogs.com/albert67/p/10456401.html
Copyright © 2011-2022 走看看