Guest User

Untitled

a guest
Dec 14th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. /*Time complexity of knapsack is clearly O(N*MW)*/
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. typedef long long ll;
  5. typedef unsigned long long llu;
  6. typedef vector<int> vi;
  7. typedef pair<int, int> ii;
  8. typedef vector<ii> vii;
  9. typedef set<int> si;
  10. typedef map<int,int> mii;
  11. typedef map<string, int> msi;
  12. typedef map<int,pair<int,int> > miii;
  13. typedef complex<double> point;
  14. typedef pair<int, ii> iii;
  15. typedef vector<iii> viii;
  16. typedef vector<vi > vvi;
  17. #define X real()
  18. #define Y imag()
  19. #define FileIn(file) freopen(file".txt", "r", stdin)
  20. #define FileOut(file) freopen(file".txt", "w", stdout)
  21. #define Fill(ar, val) memset(ar, val, sizeof(ar))
  22. #define PI 3.1415926535897932385
  23. #define all(ar) ar.begin(), ar.end()
  24. #define pb push_back
  25. #define bit(n) (1<<(n))
  26. #define Last(i) (i & -i)
  27. #define INF 500000000
  28. #define maxN 10000010
  29. #define VISITED 1
  30. #define UNVISITED -1
  31. #define P(p) const point &p
  32. #define L(p0, p1) P(p0), P(p1)
  33. /* SuperSale */
  34.  
  35. // 0-1 Knapsack DP (Top-Down) - faster as not all states are visited
  36.  
  37.  
  38.  
  39. int i, T, ans, N, V[102], memo[102][50002];
  40.  
  41. int value(int id, int w) {
  42. if (id == N || w == 0) return 0;
  43. if (memo[id][w] != -1) return memo[id][w];
  44. if (V[id] > w) return memo[id][w] = value(id + 1, w);
  45. return memo[id][w] = max(value(id + 1, w), V[id] + value(id + 1, w - V[id]));
  46. }
  47.  
  48. int main() {
  49. //FileIn("in");
  50. //FileOut("out");
  51. scanf("%d", &T);
  52. int sum=0;
  53. while (T--) {
  54. memset(memo, -1, sizeof memo);
  55. sum=0;
  56. scanf("%d", &N);
  57. for (i = 0; i < N; i++)
  58. {
  59. scanf("%d", &V[i]);
  60. sum+=V[i];
  61. }
  62. ans = value(0, sum/2);
  63. //person 1 gets ans, person 2 gets sum - ans, so difference is sum - 2 * ans
  64. printf("%d\n", sum-2*ans);
  65. }
  66.  
  67. return 0;
  68. }
Add Comment
Please, Sign In to add comment