Submission #1295564

#TimeUsernameProblemLanguageResultExecution timeMemory
1295564gramathegodKnapsack (NOI18_knapsack)C++20
12 / 100
19 ms31860 KiB
#include <bits/stdc++.h> using namespace std; const int N=2005; #define int long long int dp[N][N], sumpart[N]; 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<N;j++){ if (j-w>=0){ sumpart[j]+=sumpart[j-w]; } if (dp[i-1][j]!=-1){ sumpart[j]++; } } for (int g=0;g+w<N;g++){ if (dp[i][g]!=-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[i][g+w]=max(dp[i][g+w], dp[i][g]+v); } } else{ dp[i][g+w]=max(dp[i][g+w], dp[i][g]+v); } } if (dp[i-1][g]==-1)continue; dp[i][g+w]=max(dp[i][g+w], dp[i-1][g]+v);//adding once } for (int g=0;g<N;g++){ dp[i][g]=max(dp[i][g], dp[i-1][g]); } } int ans=0; for (int i=0;i<=s;i++){ ans=max(ans, dp[n][i]); } 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...