Submission #1295570

#TimeUsernameProblemLanguageResultExecution timeMemory
1295570gramathegodKnapsack (NOI18_knapsack)C++20
12 / 100
2 ms1024 KiB
#include <bits/stdc++.h> using namespace std; const int N=1e5+5, S=2005; #define int long long int dp[2][S], 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; for (int i=1;i<=n;i++){ int v,w,k,curr=i%2, prev=1-curr;cin>>v>>w>>k; memset(sumpart, 0, sizeof(sumpart)); for (int j=0;j<S;j++){ dp[curr][j]=-1; if (j-w>=0){ sumpart[j]+=sumpart[j-w]; } if (dp[prev][j]!=-1){ sumpart[j]++; } } for (int g=0;g+w<S;g++){ if (dp[curr][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[curr][g+w]=max(dp[curr][g+w], dp[curr][g]+v); } } else{ dp[curr][g+w]=max(dp[curr][g+w], dp[curr][g]+v); } } if (dp[prev][g]==-1)continue; dp[curr][g+w]=max(dp[curr][g+w], dp[prev][g]+v);//adding once } for (int g=0;g<S;g++){ dp[curr][g]=max(dp[curr][g], dp[prev][g]); } } int ans=0; for (int i=0;i<=s;i++){ ans=max(ans, dp[n%2][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...