#include <bits/stdc++.h>
using namespace std;
#define int long long
// #define endl '\n'
#define ff first
#define ss second
#define pb push_back
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define ar array
const int MOD = 1e9 + 7,INF = 1e18, N = 2e5 + 5;
/*
*/
void solve(){
int s , n;
cin >> s >> n;
vector <ar <int, 3>> a(n);
set <int> st;
vector <vector <pair<int,int>>> b(s + 1);
for(int i = 0;i < n;i++){
int v , w , k;
cin >> v >> w >> k;
if(w > s) continue;
b[w].pb({v , k});
st.insert(w);
}
vector <int> dp(s + 1, 0);
vector <int> use(s + 1);
use[0] = 1;
for(int w : st){
vector <int> c;
for(auto [v , k] : b[w]){
for(int i = 0;i < min(k , 2000ll);i++){
c.pb(v);
}
}
sort(rall(c));
for(int k = s;k >= 0;k--){
if(use[k]){
// cout<<k<<endl;
int j = 0;
for(int i = w + k;i <= s;i += w){
if(j == (int)c.size()) break;
dp[i] = max(dp[i] , dp[i - w] + c[j]);
j++;
use[i] = 1;
}
}
}
// for(int i = 0;i <= s;i++){
// cout<<dp[i]<<' ';
// }
// cout<<endl;
}
int ans = 0;
for(int i = 0;i <= s;i++){
// cout<<dp[i]<<' ';
ans = max(ans , dp[i]);
}
// cout<<endl;
cout<<ans<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int ti = 1;
// cin >> ti;
while (ti--) {
solve();
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |