1 solutions

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

    C++ :

    #include<cstdio>
    #include<cstring>
    using namespace std;
    int t[110000];
    int f[110000];
    int mymax(int x,int y)
    {
        return x>y?x:y;
    }
    int main()
    {
        int n,T;
        while(scanf("%d%d",&n,&T)!=EOF)
        {
    	    for(int i=1;i<=n;i++) scanf("%d",&t[i]);
    	    memset(f,-1,sizeof(f));
    	    f[0]=0;
    	    for(int i=1;i<=n;i++)
    	    {
    	        for(int j=T;j>=t[i];j--)
    	        {
    	            if(f[j-t[i]]!=-1)
    	            {
    	                f[j]=mymax(f[j],f[j-t[i]]+t[i]);
    	            }
    	        }
    	    }
    	    int ans=0;
    	    for(int i=1;i<=T;i++) ans=mymax(ans,f[i]);
    	    printf("%d\n",ans);
    	}
        return 0;
    }
    

    Pascal :

    var
      n, k, i, j : longint;
      a : array[1..100] of longint;
      f : array[0..100000] of longint;
    
    begin
      readln(n, k);
      for i := 1 to n do
        read(a[i]);
      fillchar(f, sizeof(f), 0);
      for i := 1 to n do
        for j := k downto a[i] do
          if f[j-a[i]] + a[i] > f[j] then
            f[j] := f[j-a[i]] + a[i];
      writeln(f[k]);
    end.
    
    
    • 1

    Information

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