Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Point {
  5. long long y, x;
  6. };
  7.  
  8. Point ps[100001];
  9.  
  10. long long _abs(long long a) {
  11. return a > 0 ? a : -a;
  12. }
  13.  
  14. long long _max(long long a, long long b) {
  15. return a > b ? a : b;
  16. }
  17.  
  18. long long getArea(Point s, Point a, Point b) {
  19. return _abs((a.y - s.y)*(b.x - s.x) - (b.y - s.y)*(a.x - s.x));
  20. }
  21.  
  22. long long D[101][101][101];
  23.  
  24. long long solve(int start, int still, int cnt, int N) {
  25.  
  26. long long &ret = D[start][still][cnt];
  27. if (ret != 0) {
  28. return ret;
  29. }
  30.  
  31. if (cnt <= 0) return 0;
  32.  
  33.  
  34. int i = start + 1;
  35.  
  36. while (i != still) {
  37. long long area = getArea(ps[start], ps[i], ps[still]);
  38. ret = _max(ret, solve(start, i, cnt - 1, N) + area);
  39. i = (i + 1) % N;
  40. }
  41.  
  42. return ret;
  43. // cout << ret << endl;
  44. }
  45.  
  46. int main() {
  47. int T;
  48. cin >> T;
  49.  
  50. for (int t = 1; t <= T; t++) {
  51. int n, k;
  52. cin >> n >> k;
  53.  
  54. for (int i = 0; i < 101; i++) {
  55. for (int j = 0; j < 101; j++) {
  56. for (int k = 0; k < 101; k++) {
  57. D[i][j][k] = 0;
  58. }
  59. }
  60. }
  61.  
  62. for (int i = 0; i < n; i++) cin >> ps[i].x >> ps[i].y;
  63.  
  64. long long ans = 0;
  65. for (int i = 0; i < n; i++) {
  66. int j = i + 1;
  67. while (j != i) {
  68. ans = _max(ans, solve(i, j, k-2, n));
  69. j = (j + 1) % n;
  70. }
  71. }
  72.  
  73. cout << "#" << t << " ";
  74. cout << ans << endl;
  75. }
  76.  
  77. return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement