zoukankan      html  css  js  c++  java
  • 牛客 美味菜肴(背包)

    容易看出是01背包,但是有个不同之处是,dp要求无后效性,而这题因为时间会影响答案,所以买的顺序是需要确定下来才能做背包dp

    可以用贪心的方法,并且易证要按t/b排序。之后答案的顺序肯定是按所给的顺序取的,再做一遍01背包即可

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    const int mod=1e9+7;
    typedef long long ll;
    struct node{
        ll a,b,c;
        bool operator <(const node &t )const{
            return c*t.b<b*t.c;
        }
    }s[110];
    ll b[N];
    ll f[N];
    int main(){
        int i;
        int n,m,t;
        cin>>n>>m>>t;
        for(i=1;i<=n;i++){
            cin>>b[i];
        }
        for(i=1;i<=m;i++){
            int j;
            cin>>j>>s[i].a>>s[i].c;
            s[i].b=b[j];
        }
        sort(s+1,s+1+m);
        for(i=1;i<=t;i++)
            f[i]=-1e6;
        f[0]=0;
        for(i=1;i<=m;i++){
            for(int j=t;j>=s[i].c;j--){
                f[j]=max(f[j],f[j-s[i].c]+s[i].a-s[i].b*(j));
            }
        }
        ll ans=-0x3f3f3f3f;
        for(i=1;i<=t;i++)
            ans=max(ans,1ll*f[i]);
        cout<<ans<<endl;
    }
    View Code
  • 相关阅读:
    清除所有缓存命令
    web前端工程师面试技巧 常见问题解答
    Web前端开发面试技巧
    JavaScript
    JavaScript Cookie
    JavaScript 计时事件
    javascript 弹窗
    JavaScript Window Navigator
    JavaScript Window History
    JavaScript Window Location
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12916134.html
Copyright © 2011-2022 走看看