1 条题解

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

    C :

    #include<stdio.h>
    #include<string.h>
    int max(int a,int b)
    {
    	if (a<b) return b;
    	else return a;
    }
    int main()
    {
    	int box[31];
    	int V,n,max_V[20000];
    	memset(box,0,sizeof(box));
    	scanf("%d %d",&V,&n);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&box[i]);
    	}
    	for(int x=1;x<=n;x++)
    	{
    	    for(int y=V;y>=1;y--)
    		{
    	         if(box[x]<=y) max_V[y]=max(max_V[y],max_V[y-box[x]]+box[x]);
    		}
    	}
    	printf("%d\n",V-max_V[V]);
    	return 0; 
    } 
    

    C++ :

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N(1005);
    int f[N]={0};
    int main()
    {
    //    ifstream cin("medic.in");
    //    ofstream cout("medic.out");
        int T,M,t,v;
        while (cin>>T>>M)
        {
            fill(f,f+N,0);
            for (int i=0;i<M;i++)
            {
                cin>>t>>v;
                for (int j=T;j>=t;j--)
                    f[j]=max(f[j],v+f[j-t]);
            }
            cout<<f[T]<<endl;
        }
      //  system("pause");
        return 0;
    }
        
    
    

    Pascal :

    var n,v,i,j:longint;a,p:array[0..1000] 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
          begin
              if p[j-a[i]]=1 then p[j]:=1;
          end;
        for i:=v downto 1 do
          if p[i]=1 then begin writeln(v-i);break; end;
    end.
    

    Java :

    import java.util.Scanner;
    
    public class Main{
    	static int[] w = new int[20005];
    	static int[] a = new int[20005];
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		while(in.hasNextInt()){
    			int v = in.nextInt();
    			int n = in.nextInt();
    			for(int i=1;i<=n;i++){
    				a[i] = in.nextInt();
    			}
    			for(int i=1;i<=n;i++){
    				for(int j=v;j>=1;j--){
    					if(j<a[i])
    						w[j] = Math.max(w[j-1],w[j]);
    					else
    						w[j] = Math.max(w[j],w[j-a[i]]+a[i]);
    				}
    			}
    			System.out.println(v-w[v]);
    		}
    	}
    }
    
    • 1

    信息

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