1 solutions

  • 0
    @ 2025-11-5 19:32:31

    C :

    #include<stdio.h>
    #include<math.h>
    int a[25];
    int s[25];
    int max;
    void dp(int n,int m,int num)
    {
      if (!m)
      {
        if (max < num) max = num;
      }
      if (n<0 || fabs(m)>s[n] || num+s[n]<max)
        return ;
      dp(n-1,m+a[n],num+a[n]);
      dp(n-1,m-a[n],num+a[n]);
      dp(n-1,m,num);
    }
    int main()
    {
      int n;
      int i;
      while (scanf("%d",&n),n)
      {
        for (i=0; i<n; i++)
        {
          scanf("%d",a+i);
          if (!i) s[i] = a[i];
          else s[i] = s[i-1] + a[i];
        }
        max = 0;
        dp(n-1,0,0);
        printf("%d\n",s[n-1]-max);
      }
      return 0;
    }
    

    C++ :

    #include <stdio.h>
    #include <math.h>
    
    int a[25], sv[25], maxi;
    
    void dfs(int r, int d, int bv) {
    	if (!d) {
    		if (bv > maxi)
    			maxi = bv;
    	}
    	if (r < 0 || fabs(d) > sv[r] || bv + sv[r] < maxi)
    		return;
    	dfs(r - 1, d + a[r], bv + a[r]);
    	dfs(r - 1, d - a[r], bv + a[r]);
    	dfs(r - 1, d, bv);
    }
    
    int main() {
    	int n, i;
    	while (scanf("%d", &n) != EOF, n) {
    		for (i = 0; i < n; i++) {
    			scanf("%d", &a[i]);
    			if (!i)
    				sv[i] = a[i];
    			else
    				sv[i] = sv[i - 1] + a[i];
    		}
    		maxi = 0;
    		dfs(n - 1, 0, 0);
    		printf("%d\n", sv[n - 1] - maxi);
    	}
    	return 0;
    }
    
    • 1

    Information

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