Submission #630575

#TimeUsernameProblemLanguageResultExecution timeMemory
630575chjiaoKnapsack (NOI18_knapsack)C++14
37 / 100
3 ms468 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); //freopen("Knapsack.in", "r", stdin); // freopen("Knapsack.out", "w", stdout); int limit, type_num; cin >> limit >> type_num; // map<int, vector<tuple<int, int, int>>> by_weight; //{weight, {value, amount}}, 根据weight从小到大排序 vector<vector<int>> items(type_num, vector<int>(3)); for (int i = 0; i < type_num; i++) { int weight, num, val; cin >> val >> weight >> num; if (weight>limit) continue; items[i][0] = weight; items[i][1] = num; items[i][2] = val; } vector<int> dp(limit+1, -1); dp[0]= 0; int dylimit=0; for (int t=0; t<type_num; t++) { int weight, num, val; weight = items[t][0]; num = items[t][1]; val = items[t][2]; for (int i= min(limit - weight, dylimit); i>=0; i--) { for (int k=1; k <= num; k++) { if (dp[i]>=0 && i+k*weight <=limit) { dp[i+k*weight] = max(dp[i+k*weight], dp[i] + k*val); dylimit = max(dylimit, dp[i+k*weight] ); } } } } cout << *max_element(dp.begin(), dp.end()) << endl; }
#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...