1 条题解

  • 0
    @ 2025-2-14 21:20:41

    C :

    #include <stdio.h>
    #include <string.h>
    int n;
    int a[33],d[20005];
    int main(){
        int w,i,j;
        scanf("%d%d", &w, &n);
        for (i = 0; i < n; i++){
            scanf("%d", &a[i]);
        }
        memset(d, 0, sizeof(d));
        for (i = 0; i < n; i++){
            for (j = w; j >= a[i]; j--)
                 if(d[j - a[i]] + a[i]>d[j])
                 d[j]=d[j - a[i]] + a[i];
        }
        printf("%d\n", w - d[w]);
        return 0;
    }
    

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    using namespace std;
    int a[100000],b[100000],f[100000],m,n,j,v,i;
    int main ()
    {
    cin>>v>>n;
     for (i=1;i<=n;++i)
      cin>>a[i];
     b[0]=1;
     for (i=1;i<=n;++i)
      for (j=v;j>=a[i];--j)
       if (b[j-a[i]]>0) b[j]=b[j]+b[j-a[i]];
     /*for (i=1;i<=v;++i)
      cout<<b[i]<<" ";
     cout<<endl;*/
     for (i=v;i>=1;--i)
        if (b[i]!=0)
         {
          v=v-i;
          cout<<v;
    	  break;
         }
     return 0;
    }
    

    Pascal :

    var
       v,n,i,j:longint;
       a,p:array[0..50000]of longint;
    begin
     readln(v);
     readln(n);
     for i:=1 to n do readln(a[i]);
     p[0]:=1;
     for i:=1 to n do
      for j:=v downto a[i] do
       if p[j-a[i]]=1 then p[j]:=1;
     for i:=v downto 1 do if p[i]=1 then break;
     writeln(v-i);
    end.
    
    • 1

    信息

    ID
    810
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者