Submission #1225376

#TimeUsernameProblemLanguageResultExecution timeMemory
1225376sparsh0024Knapsack (NOI18_knapsack)C++20
17 / 100
1 ms1096 KiB
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
    int maxkilo,noitems;
    cin>>maxkilo>>noitems;
    vector<pair<int,pair<int,int>>> value(noitems);
    for(int i = 0;i<noitems;i++){
        cin>>value[i].second.first>>value[i].second.second>>value[i].first;
    }
    vector<vector<int>> dp(noitems+1,vector<int>(maxkilo+1,0));
    int maxi = 0;
   
    for(int i =1;i<noitems+1;i++){
         vector<int> howmany(maxkilo+1,0);
        for(int j = 1;j<maxkilo+1;j++){
            int take = 0;
            int nottake = dp[i-1][j];
            if(value[i-1].second.second <= j){
                take = value[i-1].second.first+dp[i-1][j-value[i-1].second.second];
                if(value[i].first >1){
                    int take2 = value[i-1].second.first+dp[i][j-value[i-1].second.second];
                    if(take2 >take){
                        howmany[j] = howmany[j-value[i-1].second.second]+1;
                        if(howmany[j] >= value[i].first){
                            take2  = 0;
                        }
                    }else{
                        howmany[j] = 1;
                    }
                    take = max(take,take2);
                } 
            }
            if(nottake >= take){
                howmany[j] = 0;
            }
            dp[i][j] = max(take,nottake);
            maxi  = max(maxi,dp[i][j]);
        }
    }
    cout<<maxi<<endl;
    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...