3 条题解

  • -1
    @ 2024-10-24 19:34:14

    与同系列的上一道题一样,只是变成了抢商店,所以在经过每个商店的时候记录 f2[m]

    需要注意的是,f2[m]只需要在商店内转移

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    #define str string
    #define db double
    #define F(n) for(int i=1;i<=n;i++)
    
    const int dx[5]={0,1,-1,0,0};
    const int dy[5]={0,0,0,1,-1};
    
    const int LXB=2e5+10;
    
    
    int n,m,k,t;
    int f[LXB],f2[LXB],sum[LXB];
    string ss;
    char p;
    
    struct node
    {
        int w,v,x;
    }a[LXB];
    
    bool cmp(node l,node r){return l.x==r.x?l.w<r.w:l.x<r.x;}
    
    signed main(){
        ios::sync_with_stdio(0);cin.tie(0);
        int T=1;
        while(T--){
            cin>>n>>m;
            F(n){
                cin>>a[i].w>>a[i].v>>a[i].x;
                sum[a[i].x]+=a[i].v;
            }
            sort(a+1,a+1+n,cmp);
            F(n){
                t++,k=a[i].x;
                f2[t]=max(f2[t-1],f[m]+sum[k]);
                sum[k]=0;
                for(int j=m;j>=a[i].w;j--){
                    f[j]=max(f[j],f[j-a[i].w]+a[i].v);
                }
            }
        }
        cout<<f2[n];
        return 0;
    }
    

信息

ID
844
时间
1000ms
内存
256MiB
难度
10
标签
递交数
2
已通过
2
上传者