theo830

money

May 18th, 2019
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.60 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4. #include<stdio.h>
  5. using namespace std;
  6. vector<int> q;
  7. bool printknapSack(int W, int val[], int n){
  8. int i, w;
  9. int K[n + 1][W + 1];
  10. for (i = 0; i <= n; i++) {
  11. for (w = 0; w <= W; w++) {
  12. if (i == 0 || w == 0){
  13. K[i][w] = 0;
  14. }
  15.  
  16. else if (val[i - 1] <= w){
  17. K[i][w] = max(val[i - 1] +K[i - 1][w - val[i - 1]], K[i - 1][w]);
  18. }
  19. else{
  20. K[i][w] = K[i - 1][w];
  21. }
  22. }
  23. }
  24. if(K[n][W] == W){
  25. int res = K[n][W];
  26. w = W;
  27. for (i = n; i > 0 && res > 0; i--) {
  28. if (res == K[i - 1][w])
  29. continue;
  30. else {
  31. q.push_back(val[i-1]);
  32. res = res - val[i - 1];
  33. w = w - val[i - 1];
  34. }
  35. if(res == 0){
  36. break;
  37. }
  38. }
  39. return true;
  40. }
  41. else{
  42. return false;
  43. }
  44. }
  45. int main(){
  46. int n;
  47. scanf("%d",&n);
  48. int val[n];
  49. int y=0;
  50. vector<int>k;
  51. vector<int>q1;
  52. int temp;
  53. for(int i=0;i<n;i++){
  54. scanf("%d",&val[i]);
  55. y+=val[i];
  56. }
  57. int tr;
  58. tr = y/2;
  59. bool b;
  60. while(tr > 0){
  61. temp = y - (2 * tr);
  62. if(temp != 0){
  63. b = printknapSack(temp,val,n);
  64. }
  65. else{
  66. b = true;
  67. }
  68. if(b){
  69. if(temp != 0){
  70. while(!q.empty()){
  71. for(int i=0;i<n;i++){
  72. if(val[i] == q.back()){
  73. val[i] = 0;
  74. k.push_back(i);
  75. q1.push_back(q.back());
  76. q.pop_back();
  77. break;
  78. }
  79. }
  80. }
  81. }
  82. b = printknapSack(tr,val,n);
  83. if(temp != 0){
  84. while(!k.empty()){
  85. val[k.back()] = q1.back();
  86. k.pop_back();
  87. q1.pop_back();
  88. }
  89. }
  90. if(b){
  91. break;
  92. }
  93. tr--;
  94. }
  95. else{
  96. tr--;
  97. }
  98. }
  99. if(tr == 0){
  100. printf("%d",y);
  101. }
  102. else{
  103. printf("%d",tr+temp);
  104. }
  105. return 0;
  106. }
Add Comment
Please, Sign In to add comment