theo830

money

May 16th, 2019
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 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. long long 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. else if (val[i - 1] <= w){
  16. K[i][w] = max(val[i - 1] +K[i - 1][w - val[i - 1]], K[i - 1][w]);
  17. }
  18. else{
  19. K[i][w] = K[i - 1][w];
  20. }
  21. }
  22. }
  23. if(W % 2 == 1){
  24. W--;
  25. }
  26. while(K[n][W] != K[n][W/2] * 2){
  27. W-=2;
  28. }
  29. return K[n][W];
  30. }
  31. int main(){
  32. long long n;
  33. cin>>n;
  34. long long val[n];
  35. long long y=0;
  36. long long x;
  37. for(long long i=0;i<n;i++){
  38. cin>>val[i];
  39. y+=val[i];
  40. }
  41. int tr;
  42. tr = printknapSack(y,val,n,y);
  43. if(tr == y){
  44. cout<<tr/2;
  45. }
  46. else{
  47. cout<<(tr/2)+(y - tr);
  48. }
  49. return 0;
  50. }
Add Comment
Please, Sign In to add comment