Submission #1295567

#TimeUsernameProblemLanguageResultExecution timeMemory
1295567gramathegodKnapsack (NOI18_knapsack)C++20
0 / 100
153 ms327680 KiB
#include <bits/stdc++.h> using namespace std; const int N=1e5+5, S=2005; #define int long long int dp[S][N], sumpart[S]; signed main() { memset(dp, -1, sizeof(dp)); ios::sync_with_stdio(false); cin.tie(nullptr); int s,n;cin>>s>>n; dp[0][0]=0; sumpart[0]=1; for (int i=1;i<=n;i++){ int v,w,k;cin>>v>>w>>k; memset(sumpart, 0, sizeof(sumpart)); for (int j=0;j<S;j++){ if (j-w>=0){ sumpart[j]+=sumpart[j-w]; } if (dp[j][i-1]!=-1){ sumpart[j]++; } } for (int g=0;g+w<S;g++){ if (dp[g][i]!=-1){ if (g-(k-1)*w>=0){ int x=0; if (g-k*w>=0){ x=sumpart[g-k*w]; } if (sumpart[g]-x>0){ dp[g+w][i]=max(dp[g+w][i], dp[g][i]+v); } } else{ dp[g+w][i]=max(dp[g+w][i], dp[g][i]+v); } } if (dp[g][i-1]==-1)continue; dp[g+w][i]=max(dp[g+w][i], dp[g][i-1]+v);//adding once } for (int g=0;g<S;g++){ dp[g][i]=max(dp[g][i], dp[g][i-1]); } } int ans=0; for (int i=0;i<=s;i++){ ans=max(ans, dp[i][n]); } cout<<ans; return 0; }
#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...