Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. vector<int> w;
  5. vector<ll int> h;
  6. ll int c[5010][5010];
  7. ll int dp[2][5010];
  8. void f(int g,int l1,int l2,int p1,int p2)
  9. {
  10. if(l1>l2)
  11. return ;
  12. int lm = (l1+l2)/2,pm;
  13. ll int ans = LLONG_MAX;
  14. for(int i=p1;i<=p2;i++)
  15. {
  16. if(i>lm)
  17. break;
  18. if(dp[0][i-1]+c[i][lm]<ans)
  19. {
  20. ans = dp[0][i-1]+c[i][lm];
  21. pm = i;
  22. }
  23. }
  24. dp[1][lm]=ans;
  25. f(g,l1,lm-1,p1,pm);
  26. f(g,lm+1,l2,pm,p2);
  27. }
  28. int main()
  29. {
  30. int n,k;
  31. ll int sum = 0;
  32. cin>>n>>k;
  33. w.resize(n);
  34. h.resize(n);
  35. for(int i=0;i<n;i++)
  36. {
  37. cin>>h[i]>>w[i];
  38. }
  39. for(int i=0;i<n;i++)
  40. {
  41. c[i][i]=0;
  42. ll int sum = 0;
  43. for(int j=i+1;j<n;j++)
  44. {
  45. sum+=(h[j]-h[i])*w[j];
  46. c[i][j]=sum;
  47. }
  48. }
  49. for(int i=0;i<n;i++)
  50. {
  51. sum+=(h[i]-h[0])*w[i];
  52. dp[0][i]=sum;
  53. }
  54. for(int i=2;i<=k;i++)
  55. {
  56. f(i,0,n-1,0,n-1);
  57. for(int i=0;i<n;i++)
  58. dp[0][i]=dp[1][i];
  59. }
  60. cout<<dp[0][n-1];
  61. return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement