比赛 位运算及及其应用题单 评测结果 AAAAAAAAAA
题目名称 宝物筛选 最终得分 100
用户昵称 TeaWine 运行时间 0.212 s
代码语言 C++ 内存使用 3.37 MiB
提交时间 2025-01-25 11:09:00
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

int n,W,n2,a[100086],zw[1000086],zv[1000086],dp[1000086];

int main () {
    freopen("treasure.in","r",stdin);
    freopen("treasure.out","w",stdout);
    
    cin>>n>>W;
    for(int i = 0; i<n; i++){
        int v,w,x,l=1;
        cin>>v>>w>>x;
        while(x-l>=0){
            x-=l;
            zw[n2]=w*l;
            zv[n2]=v*l;
            a[n2++]=l;
            
            l*=2;
        }
        zw[n2]=w*x;
        zv[n2]=v*x;
        a[n2++]=x;
    }
    
    for(int i = 0; i<n2; i++){
        for(int l = W; l>=zw[i]; l--){
            dp[l]=max(dp[l],dp[l-zw[i]]+zv[i]);
        }
    }
    
    cout<<dp[W];
    
    return 0;
}