// Source: https://usaco.guide/general/io
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=a; i<=b; i++)
#define fs first
#define sc second
#define pb push_back
const int N=2*1e5+3;
const int R=2002;
int a[N],v[N],w[N],k[N],dp[N];
vector<pair<int,int>> vec;
signed main(){
int n,s; cin>>s>>n;
rep(i,1,n){cin>>v[i]>>w[i]>>k[i]; k[i]=min(k[i],R);}
rep(i,1,n){
int pow=1;
int k2=k[i];
while(pow<=k2){
k2-=pow;
pair<int,int> pr;
pr.fs=v[i]*pow;
pr.sc=w[i]*pow;
vec.pb(pr);
pow++;
if(pow>k2 and k2!=0){
pr.fs=v[i]*k2;
pr.sc=w[i]*k2;
vec.pb(pr);
}
}
for(int i1=0; i1<vec.size(); i1++){
for(int j=s; j>=vec[i1].sc; j--){
dp[j]=max(dp[j-vec[i1].sc]+vec[i1].fs,dp[j]);
}
}
vec.clear();
}
// for(auto x:vec){
// cout<<x.fs<<" "<<x.sc<<" "<<endl;
// }
// for(int i=0; i<vec.size(); i++){
// for(int j=s; j>=vec[i].sc; j--){
// dp[j]=max(dp[j-vec[i].sc]+vec[i].fs,dp[j]);
// }
// }
cout<<dp[s]<<endl;
}
# | 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... |