2 条题解

  • 1
    @ 2025-12-06 12:34:40

    很显然这是一道模版题,直接实现01背包即可:

    #include<bits/stdc++.h>
    using namespace std;
    int m,n,w[20005],c[20005];
    int dp[20005][20005];
    int main(){
        cin>>m>>n;
        for(int i=1;i<=n;i++) cin>>w[i]>>c[i];
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                if(j<w[i]) dp[i][j]=dp[i-1][j];
                else dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+c[i]);
        cout<<dp[n][m];
    }
    
  • 0
    @ 2021-02-06 21:28:07

    本题是0/1背包
    价值v要乘上重量w
    开long long!数组要大!
    我关于0/1背包的讲解:【精讲】DP经典问题——0/1背包问题

    #include<cstdio>
    using namespace std;
    int n,t,w,v,f[1001];
    int max(int x,int y){
        if(x>y)return x;
        else return y;
    }
    int main(){
        scanf("%d%d",&n,&t);
        for(int i=1;i<=t;i++)
        {
            scanf("%d%d",&w,&v);
            for(int j=n;j>=w;j--)
                f[j]=max(f[j],f[j-w]+v);        
        }
    
        printf("%d",f[n]);
    }
    
  • 1

信息

难度
5
分类
(无)
标签
递交数
51
已通过
20
通过率
39%
被复制
1
上传者