1 solutions

  • 0
    @ 2025-11-5 15:00:00

    C :

    #include<stdio.h>
    int dp[30001], v[26], w[26];
    int max(int a,int b)
    {
    	if(a>b)
    		return a;
    	else
    		return b;
    }
    int main()
    {
    	int N, m,i,j;
    	scanf("%d%d",&N,&m);
        for(i=0;i<m;i++)
            scanf("%d%d",&v[i],&w[i]);
        dp[0]=0;
        for(i=0;i<m;i++)
            for(j=N;j>=v[i];j--)
                dp[j] = max(dp[j],dp[j-v[i]]+v[i]*w[i]);
        printf("%d\n",dp[N]);
    	return 0;
    }
    

    C++ :

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<ctime>
    #include<cmath>
    #include<string>
    #include<cstdio>
    using namespace std;
    
    int V, m, res = 0;
    struct node{
        int v, w;
    }P[30];
    
    void dfs(int k, int v, int r)
    {
        if(r > res) res = r;
        if(k == m + 1) return;
        dfs(k + 1, v, r);
        if(v > P[k].v) dfs(k + 1, v - P[k].v, r + P[k].w);
    }
    
    int main()
    {
        cin>>V>>m;
        for(int i = 1; i <= m; ++i)
        {
            cin>>P[i].v>>P[i].w;
            P[i].w *= P[i].v;
        }
        dfs(0, V, 0);
        cout<<res<<endl;
        return 0;
    }
    
    

    Pascal :

    var n,m,w,c,i,j:longint;
       f:array[0..100000]of longint;
    begin
      readln(n,m);
      for i:=1 to m do begin
        readln(w,c);
        c:=c*w;
        for j:= n downto w do
        if f[j-w]+c>f[j] then f[j]:=f[j-w]+c;
      end;
      for i:=2 to n do
      if f[i]>f[1] then f[1]:=f[i];
      writeln(f[1]);
    end.
    
    • 1

    Information

    ID
    16308
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By