Advertisement
MinhNGUYEN2k4

cheese

Sep 21st, 2021
666
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.15 KB | None | 0 0
  1. //Nguyen Huu Hoang Minh
  2. #include <bits/stdc++.h>
  3. #define sz(x) int(x.size())
  4. #define all(x) x.begin(),x.end()
  5. #define reset(x) memset(x, 0,sizeof(x))
  6. #define pb push_back
  7. #define mp make_pair
  8. #define fi first
  9. #define se second
  10. #define N 105
  11. #define remain(x) if (x > MOD) x -= MOD
  12. #define ii pair<int, int>
  13. #define iiii pair< ii , ii >
  14. #define viiii vector< iiii >
  15. #define vi vector<int>
  16. #define vii vector< ii >
  17. #define bit(x, i) (((x) >> (i)) & 1)
  18. #define Task "test"
  19. #define int long long
  20.  
  21. using namespace std;
  22.  
  23. typedef long double ld;
  24. const int inf = 1e10;
  25. const int minf = -1e10;
  26.  
  27. int n, t, k;
  28. ii a[N];
  29. int ans = 0;
  30.  
  31. bool cmp(ii a, ii b){
  32.     return a.se > b.se;
  33. }
  34.  
  35. void readfile()
  36. {
  37.     ios_base::sync_with_stdio(false);
  38.     cin.tie(0);cout.tie(0);
  39.     if (fopen(Task".inp","r"))
  40.     {
  41.         freopen(Task".inp","r",stdin);
  42.         //freopen(Task".out","w",stdout);
  43.     }
  44.     cin >> n >> t >> k;
  45.     for(int i=1; i<=n; i++) cin >> a[i].fi >> a[i].se;
  46.     sort(a+1,a+1+n,cmp);
  47. }
  48.  
  49. void calc(int high, int cc){
  50.     vector<int> dp(high+10,0);
  51.     for(int i=1; i<=high; i++){
  52.         dp[i] = max(dp[i],dp[i-1]);
  53.         for(int j=1; j<=n; j++){
  54.             if (i>=a[j].se/5*4){
  55.                 dp[i] = max(dp[i],dp[i-a[j].se/5*4]+a[j].fi);
  56.             }
  57.         }
  58.     }
  59.     ans = max(ans,dp[high]+cc);
  60. }
  61.  
  62. void proc()
  63. {
  64.     if (a[1].se>=k)
  65.     {
  66.         int i=1;
  67.         while(a[i].se>=k){
  68.             calc(t-a[i].se,a[i].fi);
  69.             i++;
  70.         }
  71.         vector<int> dp(t+1,0);
  72.         for(int s=1; s<=t; s++){
  73.             for(int j=i; j<=n; j++){
  74.                 if (s-a[j].se>=0){
  75.                     dp[s] = max(dp[s],dp[s-a[j].se]+a[j].fi);
  76.                 }
  77.             }
  78.         }
  79.         ans = max(ans,dp[t]);
  80.     }
  81.     else{
  82.         vector<int> dp(t+1,0);
  83.         for(int i=1; i<=t; i++){
  84.             for(int j=1; j<=n; j++){
  85.                 if (i-a[j].se>=0){
  86.                     dp[i] = max(dp[i],dp[i-a[j].se]+a[j].fi);
  87.                 }
  88.             }
  89.         }
  90.         ans = max(ans,dp[t]);
  91.     }
  92.     cout << ans;
  93. }
  94.  
  95. signed main()
  96. {
  97.     readfile();
  98.     proc();
  99.     return 0;
  100. }
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement