theo830

moneyc++

May 16th, 2019
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<queue>
  4. #include<algorithm>
  5. using namespace std;
  6. long long printknapSack(long long W, long long val[], long long n,long long y){
  7. long long i, w;
  8. long long x=0;
  9. bool K[n + 1][W + 1];
  10. for (i = 0; i <= n; i++) {
  11. for (w = 0; w <= W; w++) {
  12. K[i][w] =0;
  13. if (i == 0 && w == 0){
  14. K[i][w] = 1;
  15. }
  16. else if( w >= val[i]){
  17. K[n][w] = max(K[i-1][w],K[i-1][w-val[i]]);
  18. }
  19. }
  20. }
  21. if(W % 2 == 1){
  22. W--;
  23. }
  24. while(K[n][W] == 0 || K[n][W/2] == 0){
  25. W-=2;
  26. }
  27. return W;
  28. }
  29. int main(){
  30. long long n;
  31. cin>>n;
  32. long long val[n];
  33. long long y=0;
  34. long long x;
  35. for(long long i=0;i<n;i++){
  36. cin>>val[i];
  37. y+=val[i];
  38. }
  39. int tr;
  40. tr = printknapSack(y,val,n,y);
  41. if(tr == y){
  42. cout<<tr/2;
  43. }
  44. else{
  45. cout<<(tr/2)+(y - tr);
  46. }
  47. return 0;
  48. }
Add Comment
Please, Sign In to add comment