Guest User

Untitled

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