theo830

moneyc++

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