1 solutions

  • 0
    @ 2024-12-11 0:49:30

    C :

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int w[1001],c[1001],dp[1001];
        int n,v,i,j;
        while(scanf("%d%d",&n,&v)==2)
        {   if(n==0&&v==0)
            break;
            memset(dp,0,sizeof(dp));
            for(i=0; i<n; ++i)
                scanf("%d%d",&c[i],&w[i]);
            for(i=0; i<n; ++i)
                for(j=v; j>=c[i]; --j)
                {
                    if(dp[j]<dp[j-c[i]]+w[i])
                        dp[j]=dp[j-c[i]]+w[i];
                }
            printf("%d\n",dp[v]);
        }
    }
    
    

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #include<cstdlib>
    using namespace std;
    int f[1010][1010];
    int weight[1010],cost[1010];
    int main()
    {
        int n,v,i,j;
        while(cin>>n>>v)
        {
            if(n == 0 && v == 0) break;
            memset(f,0,sizeof(f));
            for(i = 1; i <= n; i++)
            cin>>weight[i]>>cost[i];
            for(i = 1; i <= n; i++)
            {
                for(j = 0; j <= v; j++)
                {
                    f[i][j] = f[i-1][j];
                    if(j>=weight[i])
                    f[i][j] = max(f[i-1][j],f[i-1][j-weight[i]] + cost[i]);
                }
            }
            cout<<f[n][v]<<endl;
        }
        return 0;
    }
    
    
    • 1

    Information

    ID
    745
    Time
    3000ms
    Memory
    64MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By