Advertisement
Guest User

Untitled

a guest
May 5th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int input[25][7];
  5. double fitness[25][128];
  6. int S[25];
  7. double best = 0;
  8. int k, n;
  9.  
  10. int power_two(int exp){
  11. int j = 0;
  12. int res= 0;
  13. while(j <= exp){
  14. if (j==0){
  15. res=1;
  16. }
  17. else{
  18. res*=2;
  19. }
  20. j++;
  21. }
  22. return res;
  23. }
  24.  
  25. double bound(int pos){
  26. int s_min[25];
  27. int s_max[25];
  28. int i = pos;
  29. int j;
  30. int m_min = 0;
  31. int m_max = 0;
  32. double fitness_max_group = 0;
  33. double fitness_max = 0;
  34. i = 0;
  35. while(i<pos){
  36. s_min[i] = s_max[i] = S[i];
  37. i++;
  38. }
  39. while(i < n){
  40. s_min[i] = 0;
  41. s_max[i] = 1;
  42. i++;
  43. }
  44. i = 0;
  45. while(i<n){
  46. m_min = 0;
  47. m_max = 0;
  48. fitness_max_group = 0;
  49. j=0;
  50. while(j<k+1){
  51. if(s_min[input[i][j]] == 1){
  52. m_min+=power_two(k-j);
  53. }
  54. j++;
  55. }
  56. j = 0;
  57. while(j<k+1){
  58. if(s_max[input[i][j]] == 1){
  59. m_max+=power_two(k-j);
  60. }
  61. j++;
  62. }
  63. while(m_min <=m_max){
  64. if(fitness[i][m_min] > fitness_max_group){
  65. fitness_max_group = fitness[i][m_min];
  66. }
  67. m_min++;
  68. }
  69. fitness_max += fitness_max_group;
  70. i++;
  71. }
  72. return fitness_max;
  73. }
  74.  
  75. void rec(int pos){
  76. int i = 0;
  77. int j = 0;
  78. int m = 0;
  79. double sum=0;
  80. if (pos == n){
  81. while(i<n){
  82. m=0;
  83. j=0;
  84. while(j<k+1){
  85. if(S[input[i][j]] == 1){
  86. m+=power_two(k-j);
  87. }
  88. j++;
  89. }
  90. sum += fitness[i][m];
  91. i++;
  92. }
  93. if (sum>best){
  94. best = sum;
  95. i = 0;
  96. }
  97. return;
  98. }
  99. if (best != 0 && bound(pos) < best){
  100. return;
  101. }
  102. S[pos] = 0;
  103. rec(pos+1);
  104. S[pos] = 1;
  105. rec(pos+1);
  106. }
  107.  
  108. int main(){
  109. int i = 0;
  110. int j = 0;
  111. int aux;
  112. scanf ("%d %d", &n, &k);
  113. for (i=0; i<n; i++){
  114. for(j=0; j<k+1; j++){
  115. scanf("%d", &input[i][j]);
  116. }
  117. }
  118. i = 0;
  119. aux = power_two(k+1);
  120. j=0;
  121. for (i=0; i<n; i++){
  122. for(j=0; j<aux; j++){
  123. scanf("%lf", &fitness[i][j]);
  124. }
  125. }
  126. rec(0);
  127. printf("%lf\n", best);
  128. return 0;
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement