1 条题解

  • 0
    @ 2018-05-27 12:03:21

    其实就是3种背包的混合体
    cpp
    #include "bits/stdc++.h"
    using namespace std;
    int c[100001],w[100001],cont[100001],dp[100001];
    int main()
    {
    int v,n;
    cin>>v>>n;
    for(int i=1;i<=n;i++)
    {
    scanf("%d%d%d",&c[i],&w[i],&cont[i]);
    }
    for(int i=1;i<=n;i++)
    {
    if(cont[i]==0)
    {
    for(int j=0;j<=v;j++)
    {
    if(j>=c[i])
    dp[j]=max(dp[j],dp[j-c[i]]+w[i]);
    }
    }
    else
    {
    for(int j=v;j>=0;j--)
    {
    for(int k=1;k<=cont[i];k++)
    {
    if(j>=k*c[i])
    dp[j]=max(dp[j],dp[j-c[i]*k]+w[i]*k);
    }
    }
    }
    }
    cout<<dp[v];
    }

  • 1

信息

难度
9
分类
(无)
标签
递交数
11
已通过
4
通过率
36%
上传者