Advertisement
Guest User

624 CD

a guest
Apr 16th, 2014
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<cstdlib>
  6.  
  7. using namespace std;
  8.  
  9.  
  10. #define ms(x,val) memset(x,val,sizeof(x))
  11. #define ull unsigned long long
  12. #define iii long long
  13.  
  14.  
  15. iii dp[25],dir[25],N,n_track,track[25],par[25];
  16.  
  17.  
  18.  
  19. iii cal_track(iii i,iii cost)
  20. {
  21.     if(dp[i]!=-1) return dp[i];
  22.     if(i>=n_track) return 0;
  23.     iii mx=0,temp=0;
  24.     for(int j=i+1;j<n_track;j++)
  25.     {
  26.         if(cost+track[j]<=N)
  27.         {
  28.             temp=track[j]+cal_track(j,cost+track[j]);
  29.         }
  30.         if(mx<temp)
  31.         {
  32.             mx=temp;
  33.             dir[i]=j;
  34.         }
  35.     }
  36.     return dp[i]=mx;
  37. }
  38.  
  39.  
  40.  
  41.  
  42. int main()
  43. {
  44.     bool flag=false;
  45.     int start,MX,temp;
  46.  
  47.     while(scanf("%lld",&N)!=EOF)
  48.     {
  49.         if(flag) cout<<endl;
  50.         flag=true;
  51.         cin>>n_track;
  52.  
  53.  
  54.         ms(dir,-1);
  55.         for(int i=0;i<n_track;i++)  cin>>track[i];
  56.         MX=-1;
  57.  
  58.         start=-1;
  59.         for(int i=0;i<n_track;i++)
  60.         {
  61.             ms(dp,-1);
  62.             iii s=cal_track(i,track[i])+track[i];
  63.  
  64.             if(track[i]<=N && s>MX)
  65.             {
  66.  
  67.  
  68.                 start=i;
  69.                 MX=s;
  70.             }
  71.         }
  72.  
  73.         ms(dp,-1);
  74.         ms(dir,-1);
  75.         cal_track(start,track[start]);
  76.  
  77.         while(start!=-1)
  78.         {
  79.             cout<<track[start]<<' ';
  80.             start=dir[start];
  81.         }
  82.  
  83.         cout<<"sum:"<<MX;
  84.     }
  85.  
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement