Guest User

Untitled

a guest
Feb 21st, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. int ind[22501],dp[22501][2],dp2[22501][2],people,total,weight[100],top,top2,tmp,x=0;
  6. double a,b;
  7.  
  8. int cmp(const void *a , const void *b ) {
  9. return *(int *)a - *(int *)b;
  10. }
  11.  
  12.  
  13. int main() {
  14. int i,j,k,n,tmp,answer;
  15.  
  16. scanf("%d",&n);
  17. while(n-- > 0) {
  18. memset(dp2,0,sizeof(dp2));
  19. x++;
  20. total = 0;
  21. scanf("%d",&people);
  22. for(i=0; i<people; i++) {
  23. scanf("%d",&weight[i]);
  24. total += weight[i];
  25.  
  26. }
  27. qsort(weight,people,sizeof(weight[0]),cmp);
  28. dp2[0][0] = 0;
  29. dp2[0][1] = -1;
  30. top2 = 1;
  31. for(i=0; i<(people+1)/2; i++) {
  32. memcpy(dp,dp2,sizeof(dp));
  33. memset(ind,0,sizeof(ind));
  34. top = top2;
  35. top2 = 0;
  36. for(j=i; j<people; j++) {
  37. for(k=0; k<top; k++) {
  38. tmp = dp[k][0] + weight[j];
  39. if(j <= dp[k][1])
  40. break;
  41. if(tmp <= total/2) {
  42. if(ind[tmp] == 0) {
  43. dp2[top2][0] = tmp;
  44. dp2[top2++][1] = j;
  45. ind[tmp] = 1;
  46. }
  47. }
  48. else
  49. break;
  50. }
  51. }
  52. }
  53. answer = dp2[top2-1][0];
  54. if(people%2 != 0 && dp[top-1][0] > answer)
  55. answer = dp[top-1][0];
  56. printf("%d %d\n",answer,total-answer);
  57. if(n != 0)
  58. printf("\n");
  59. }
  60. }
Add Comment
Please, Sign In to add comment