Advertisement
Guest User

dijkstra try for #1994

a guest
Dec 17th, 2012
440
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.59 KB | None | 0 0
  1. #include<cstdio>
  2. #define FOR(i,a,b) for(int i=(int)a;i<=(int)b;++i)
  3. #define REP(i,n) FOR(i,0,n-1)
  4. #define z(i,j) ((179*(i+1)+719*(j+1))%1000)
  5. #define INF 1<<30
  6. int d[13010],l[13010],n,v,to,z;
  7. char u[13010];
  8. main(){
  9.     scanf("%d",&n);
  10.     REP(i,n)d[i]=INF,u[i]=false;
  11.     d[0]=0;l[0]=0;
  12.     REP(i,n){
  13.         v=-1;
  14.         REP(j,n)
  15.             if (!u[j]&&(v==-1||d[j]<d[v])) v=j;
  16.         u[v]=true;
  17.         FOR(to,v+1,n-1){
  18.             if (d[v]+z(v,to)<d[to])
  19.                 d[to]=d[v]+z(v,to),
  20.                 l[to]=l[v]+1;
  21.         }
  22.     }
  23.     printf("%d",d[n-1]-500*l[n-1]);
  24. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement