fork(3) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long dp[1000001];
  4. long long mini(long long x,long long y)
  5. {
  6. if(x<y)
  7. return x;
  8. return y;
  9. }
  10. int main()
  11. {
  12. int t;
  13. cin>>t;
  14. while(t--)
  15. {
  16. int n;
  17. cin>>n;
  18. vector< pair<int,int> > vec;
  19. for(int i=0;i<n;i++)
  20. {
  21. int x,y;
  22. cin>>x>>y;
  23. vec.push_back({x,y});
  24. }
  25. int m;
  26. cin>>m;
  27. vector< pair<int, long long int> > carpet;
  28. for(int i=0;i<m;i++)
  29. {
  30. int x;
  31. long long y;
  32. cin>>x>>y;
  33. carpet.push_back({x,y});
  34. }
  35. for(int i=1;i<=1000000;i++)
  36. dp[i]=100000000000000;
  37. dp[0]=0;
  38. for(int i=1;i<=1000000;i++)
  39. {
  40. for(int j=0;j<m;j++)
  41. {
  42. int len = carpet[j].first;
  43. long long int cost = carpet[j].second;
  44. if(len>=i)
  45. dp[i]=mini(dp[i],cost);
  46. else
  47. dp[i]=mini(dp[i],dp[i-len]+cost);
  48. }
  49. }
  50. long long ans=0;
  51. for(int i=0;i<n-1;i++)
  52. {
  53. int x1 = vec[i].first;
  54. int y1 = vec[i].second;
  55. int x2 = vec[i+1].first;
  56. int y2 = vec[i+1].second;
  57. long long val = ((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1));
  58. double dist = sqrt(val);
  59. long long temp = ceil(dist);
  60. ans+=dp[temp];
  61. }
  62. int x1 = vec[n-1].first;
  63. int y1 = vec[n-1].second;
  64. int x2 = vec[0].first;
  65. int y2 = vec[0].second;
  66. long long val = ((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1));
  67. double dist = sqrt(val);
  68. long long temp = ceil(dist);
  69. ans+=dp[temp];
  70. cout<<ans<<endl;
  71. }
  72. return 0;
  73. }
Runtime error #stdin #stdout 0s 11280KB
stdin
Standard input is empty
stdout
Standard output is empty