Advertisement
Guest User

Untitled

a guest
Aug 1st, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Robots 1.41 KB | None | 0 0
  1. #include <cstdio>
  2. #include <set>
  3. #include <map>
  4. #include <utility>
  5. #include <vector>
  6. #include <algorithm>
  7. #include <string>
  8. #include <iostream>
  9. using namespace std;
  10.  
  11. #define mp make_pair
  12. #define pb push_back
  13. #define sz(a) int((a).size())
  14. #define forn(i, n) for (int i=0; i<(n); ++i)
  15.  
  16. typedef pair<int,int> pii;
  17. typedef long long ll;
  18. typedef long double ld;
  19.  
  20. const int maxn = 128;
  21.  
  22. int f[maxn][maxn];
  23. int p[maxn][maxn];
  24. int num[maxn], l[maxn], d[maxn];
  25. int n, m;
  26.  
  27. int main()
  28. {
  29. //  freopen("a.in", "r", stdin);
  30.  
  31.   for (int tc=1; ; ++tc)
  32.   {
  33.     scanf("%d %d", &m, &n);    
  34.     if (m == 0 && n == 0) break;
  35.     forn (i, n)
  36.       scanf("%d %d %d", num+i, l+i, d+i);
  37.     forn (i, maxn) forn (j, maxn) f[i][j] = -1;
  38.     f[0][0] = 0;
  39.     forn (i, n) forn (j, m+1) if (f[i][j]!=-1)
  40.     {
  41.       for (int k=0; j+k<=m; ++k)
  42.       {
  43.         double cur = l[i]*0.01 + (k/(10.1+k)) * d[i] * 0.01;
  44.         int add = cur*num[i]+0.5;
  45.         if (f[i+1][j+k] <= f[i][j]+add)
  46.           f[i+1][j+k] = f[i][j]+add, p[i+1][j+k] = k;
  47.       }
  48.     }
  49.  
  50.     int res = f[n][m];
  51.     printf("Case %d: %d\n", tc, res);
  52.     vector<int> ans;
  53.     for (int i=n, j=m; i>0; --i)
  54.     {
  55.       ans.pb(p[i][j]);
  56.       j -= p[i][j];
  57.     }
  58.     reverse(ans.begin(), ans.end());
  59.     forn (i, sz(ans))
  60.     {
  61.       if (i) printf(" ");
  62.       printf("%d:%d", i, ans[i]);      
  63.     }
  64.     puts("");
  65.  
  66.  
  67.   }
  68.            
  69.   return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement