Submission #1349999

#TimeUsernameProblemLanguageResultExecution timeMemory
1349999bakhtiyarnKnapsack (NOI18_knapsack)C++20
100 / 100
220 ms6020 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N = 3e5+5;
int v[N], k[N];
vector<array<int, 2>> inp[N], kp[N];

// for(int i=1; i<=n; i++) 
void solve(){
  int S, n; cin >> S >> n;
  for(int i=1; i<=n; i++) {
    int w;
    cin >> v[i] >> w >> k[i];
    inp[w].push_back({v[i], k[i]});
  }
  
  vector<int> dp(S+1);
  for(int w=1; w<=S; w++) {
    sort(inp[w].rbegin(), inp[w].rend());
    kp[w] = inp[w];
    
    vector<int> n_dp(S+1);
    for(int s=1; s<=S; s++){
      inp[w] = kp[w];
      n_dp[s] = dp[s];
      
      int gain = 0, ptr = 0, used = 0;
      for(int cnt=1; ; cnt++){
        if(cnt * w > s) break;
        if(ptr == inp[w].size()) break;
        gain += inp[w][ptr][0];
        inp[w][ptr][1]--;
        if(!inp[w][ptr][1]) ptr++;
        n_dp[s] = max(n_dp[s], dp[s-cnt*w] + gain);
      }
      
    }
    dp = n_dp;
  }
  
  // cnt = 1....k[i]
  // dp[s-cnt*w[i]] + cnt*v[i]
  
  
  cout << dp[S];
}

signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...