1 条题解

  • 0
    @ 2025-4-12 21:52:29

    C :

    #include <stdio.h>
    int n,m;
    int run()
    {
            int i,j,a[111],b[111],d[111][1111],k;
            for(i=1;i<=m;i++)
                    scanf("%d%d",&a[i],&b[i]);
            for(i=0;i<=m;i++)
                    for(j=0;j<=n;j++)
                            d[i][j]=0;
            for(i=0;i<m;i++)
                    for(j=0;j<=n;j++)
                            for(k=0;k<=1;k++)
                                    if((j+k*a[i+1]<=n)&&(d[i+1][j+k*a[i+1]]<d[i][j]+k*b[i+1]))
                                            d[i+1][j+k*a[i+1]]=d[i][j]+k*b[i+1]; 
            j=0;
            for(i=0;i<=n;i++)
                    if(d[m][i]>j)
                            j=d[m][i];
            printf("%d\n",j);
    }
    int main()
    {
            scanf("%d%d",&n,&m);
            while(n!=0)
            {
                    run();
                    n=0;
                    scanf("%d%d",&n,&m);
            }
            return 0;
    }
    

    C++ :

    #include <stdio.h>
    int n,m;
    int run()
    {
    	int i,j,a[111],b[111],d[111][1111],k;
    	for(i=1;i<=m;i++)
    		scanf("%d%d",&a[i],&b[i]);
    	for(i=0;i<=m;i++)
    		for(j=0;j<=n;j++)
    			d[i][j]=0;
    	for(i=0;i<m;i++)
    		for(j=0;j<=n;j++)
    			for(k=0;k<=1;k++)
    				if((j+k*a[i+1]<=n)&&(d[i+1][j+k*a[i+1]]<d[i][j]+k*b[i+1]))
    					d[i+1][j+k*a[i+1]]=d[i][j]+k*b[i+1]; 
    	j=0;
    	for(i=0;i<=n;i++)
    		if(d[m][i]>j)
    			j=d[m][i];
    	printf("%d\n",j);
    }
    int main()
    {
    	scanf("%d%d",&n,&m);
    	while(n!=0)
    	{
    		run();
    		n=0;
    		scanf("%d%d",&n,&m);
    	}
    	return 0;
    }
    

    Pascal :

    program co2;
     var
      t,m:longint;
      v,s:longint;
      i,j:longint;
      f:array[0..1001]of longint;
     begin
      readln(t,m);
      while (t<>0)and(m<>0) do
       begin
        fillchar(f,sizeof(f),0);
        for i:=1 to m do
         begin
          readln(v,s);
          for j:=t downto v do
           if f[j]<f[j-v]+s then f[j]:=f[j-v]+s;
         end;
        writeln(f[t]);
        readln(t,m);
       end;
     end.
    
    
    • 1

    信息

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