1 solutions
-
0
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