frp

K

frp
May 31st, 2011
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <iomanip>
  5. #include <queue>
  6. #include <map>
  7. using namespace std;
  8. inline int sq(int x){return x*x;}
  9. int x[200],y[200];
  10. int n,k,r;
  11. vector<int> g[200];
  12. inline int l_sq(int i,int j){return sq(x[i]-x[j])+sq(y[i]-y[j]);}
  13. inline long double l(int i,int j){return sqrt(l_sq(i,j));}
  14. void make_graph()
  15. {
  16.     for(int i=0;i<n-1;i++)
  17.     {
  18.         int vx=x[i+1]-x[i],vy=y[i+1]-y[i];
  19.         for(int j=i+1;j<n;j++)
  20.             if(l_sq(i,j)<sq(r))
  21.             {
  22.                 int jx=x[j]-x[i],jy=y[j]-y[i];
  23.                 if(vx*jy-vy*jx>=0)
  24.                 {
  25.                     g[i].push_back(j);
  26.                     g[j].push_back(i);
  27.                     vx=jx;
  28.                     vy=jy;
  29.                 }
  30.             }
  31.     }
  32. }
  33. int main()
  34. {
  35.     cin>>n>>k>>r;
  36.     for(int i=0;i<n;i++)cin>>x[i]>>y[i];
  37.     make_graph();
  38.     long double d[200][200];
  39.     d[0][0]=0;
  40.     for(int j=1;j<n;j++)d[0][j]=d[0][j-1]+l(j-1,j);
  41.     for(int i=1;i<=k;i++)
  42.     {
  43.         d[i][0]=0;
  44.         for(int j=1;j<n;j++)
  45.         {
  46.             d[i][j]=d[i][j-1]+l(j-1,j);
  47.             for(int m=0;m<g[j].size();m++)
  48.             {
  49.                 int t=g[j][m];
  50.                 d[i][j]=min(d[i][j],d[i-1][t]+l(t,j));
  51.             }
  52.         }
  53.         for(int j=n-2;j>0;j--)
  54.             d[i][j]=min(d[i][j],d[i][j+1]+l(j,j+1));
  55.     }
  56.     long double res=d[0][n-1];
  57.  
  58.     for(int i=0;i<=k;i++)res=min(res,d[i][n-1]);
  59.     cout<<fixed<<setprecision(5)<<res<<'\n';
  60.  
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment