iscsi

Codechef Birthday Gift

Dec 3rd, 2011
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <sstream>
  4. #include <string>
  5. #include <vector>
  6. #include <queue>
  7. #include <set>
  8. #include <map>
  9. #include <cstdio>
  10. #include <cstdlib>
  11. #include <cctype>
  12. #include <cmath>
  13. #include <cstring>
  14. using namespace std;
  15. typedef unsigned long long LL;
  16. #define FOR(k,a,b) for(int k(a); k < (b); ++k)
  17. #define FORD(k,a,b) for(int k(a-1); k >= (b); --k)
  18. #define REP(k,a) for(int k=0; k < (a); ++k)
  19. #define ABS(a) ((a)>0?(a):-(a))
  20.  
  21. int main()
  22. {
  23. #ifdef HOME
  24.     freopen ("in.txt","r",stdin);
  25.     freopen ("out.txt","w",stdout);
  26. #endif
  27.     const int mSize=101;
  28.     const int INF=100000;
  29.     int T,D,n,m,toll[mSize][mSize],C[mSize][mSize],A[mSize][mSize];
  30.     scanf("%d",&T);
  31.     REP(testcase,T)
  32.     {
  33.         scanf("%d %d %d",&D,&n,&m);
  34.         REP(i,m)
  35.             REP(j,n)
  36.             scanf("%d",&(toll[i][j]));
  37.         REP(i,m)
  38.             REP(j,m)
  39.             scanf("%d",&(C[i][j]));
  40.         REP(k,m)
  41.             REP(i,m)
  42.             REP(j,m)
  43.             if(C[i][j]>C[i][k]+C[k][j])
  44.                 C[i][j]=C[i][k]+C[k][j];
  45.         REP(i,m)
  46.         {
  47.             A[i][0]=0;
  48.             FOR(j,1,n+1)
  49.                 A[i][j]=INF;
  50.         }
  51.         REP(i,n)
  52.         {
  53.             REP(j,m)
  54.             {
  55.                 A[j][i+1]=A[j][i]+toll[j][i];
  56.             }
  57.             REP(j,m)
  58.                 REP(k,m)
  59.             {
  60.                 if(A[j][i+1]>A[k][i+1]+C[k][j])
  61.                     A[j][i+1]=A[k][i+1]+C[k][j];
  62.             }
  63.         }
  64.         int res=A[0][n];
  65.         FOR(i,1,m)
  66.             res=min(res,A[i][n]);
  67.         if(res>D)
  68.             res=-1;
  69.         else
  70.             res=D-res;
  71.         printf("%d\n",res);
  72.     }
  73.     return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment