1 条题解

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

    C++ :

    #include <stdio.h>
    int b[111][44444];
    int run()
    {
    	int n,i,j,a[111],t=0;
    	scanf("%d",&n);
    	for(i=1;i<=n;i++)
    		scanf("%d",&a[i]);
    	for(i=0;i<=n;i++)
    		for(j=0;j<=6000;j++)
    			b[i][j]=-1;
    	b[0][2000]=0;
    	for(i=0;i<n;i++)
    	{
    		for(j=2000-t;j<=2000+t;j++)
    			if(b[i][j]!=-1)
    			{
    				if(b[i+1][j]<b[i][j])
    					b[i+1][j]=b[i][j];
    				if(b[i+1][j+a[i+1]]<b[i][j])
    					b[i+1][j+a[i+1]]=b[i][j];
    				if(b[i+1][j-a[i+1]]<b[i][j]+a[i+1])
    					b[i+1][j-a[i+1]]=b[i][j]+a[i+1];
    			}
    		t+=a[i+1];
    	}
    	if(b[n][2000]==0)
    	{
    		b[n][2000]=-1;
    		for(i=1;i<=n;i++)
    			if(a[i]==0)
    				b[n][2000]=0;
    	}
    	printf("%d\n",b[n][2000]);
    }
    int main()
    {
    	int t,i=0;
    	scanf("%d",&t);
    	while(t!=0)
    	{
    		t--;
    		i++;
    		printf("Case %d: ",i);
    		run();
    	}
    	return 0;
    }
    
    • 1

    信息

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