Guest User

Untitled

a guest
Jan 21st, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. int n, k;
  9. double x[111], y[111];
  10. double val[111][111];
  11. double opt[111][111];
  12.  
  13. double getY(int p, int q) {
  14. //cout << p <<" "<< q <<" " << -(y[p] - y[p - 1]) / (x[p] - x[p - 1]) * x[q] - y[q] <<endl;
  15. return (y[p] - y[p - 1]) / (x[p] - x[p - 1]) * (x[q]-x[p])+y[p] - y[q];
  16. }
  17.  
  18. double calc(int i, int j) {
  19. double ret = 0;
  20. for (int k = i; k < j; k++) {
  21. if ((i > 0 && i < n)&&(j > 0 && j < n)) ret=max(ret,min(getY(i,k),getY(j,k)));
  22. else if (i > 0 && i < n)
  23. ret = max(ret, getY(i, k));
  24. else if (j > 0 && j < n)
  25. ret = max(ret, getY(j, k));
  26. //cout << ret <<endl;
  27. }
  28. //cout << i <<" " << j << " "<< ret <<endl;
  29. return ret;
  30. }
  31.  
  32. int main() {
  33. while (cin >> n >> k) {
  34. if(!n&&!k) break;
  35. k++;
  36. for (int i = 0; i < n; i++)
  37. scanf("%lf%lf", &x[i], &y[i]);
  38. for (int i = 0; i <= n; i++)
  39. for (int j = i + 1; j <= n; j++)
  40. val[i][j] = calc(i, j);
  41. for (int i = 0; i <= n; i++)
  42. for (int j = 0; j <= k; j++) opt[i][j]=1e10;
  43. opt[0][0] = 0;
  44. for (int i = 0; i <= n; i++)
  45. for (int j = 0; j <= k; j++)
  46. for (int p = i + 1; p <= n; p++) {
  47. if (i==0&&p==n) continue;
  48. opt[p][j + 1] = min(opt[p][j + 1],max(opt[i][j], val[i][p]));
  49. }
  50. //for (int i = 0; i <= n; i++){
  51. // for (int j = 0; j <= k; j++)
  52. // cout << opt[i][j] <<" ";
  53. // puts("");
  54. //}
  55. printf("%.3lf\n",opt[n][k]);
  56. }
  57. }
  58. /*
  59. 6 2
  60. 0.0 0.0
  61. 1.0 3.0
  62. 3.0 6.0
  63. 6.0 9.0
  64. 8.0 10.0
  65. 17.0 12.0
  66. 0 0
  67.  
  68. */
Add Comment
Please, Sign In to add comment