# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
683065 | vjudge1 | Knapsack (NOI18_knapsack) | C++17 | 61 ms | 2896 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <set>
#include <string>
#include <cmath>
#include <map>
#include <set>
#include <queue>
#include <cstring>
#include <bitset>
using namespace std;
int x,n;
const int maxn = 2e3;
vector<pair<long long, long long>> item[maxn+5];
vector<long long> opt[maxn+5];
long long dp[maxn+5];
void solve()
{
cin >> x >> n;
long long ans = 0;
for(int i = 1; i <= n; i++)
{
long long c,v,k;
cin >> v >> c >> k;
item[c].push_back({v,k});
}
for(int i = 1; i <= x; i++)
{
sort(item[i].begin(),item[i].end());
long long sum = 0;
opt[i].push_back(sum);
for(int p = 1; p <= x / i; p++)
{
if(item[i].empty()) break;
sum += item[i].back().first;
opt[i].push_back(sum);
item[i][item[i].size()-1].second--;
if(item[i][item[i].size()-1].second == 0) item[i].pop_back();
}
}
for(int i = 1; i <= x; i++)
{
for(int p = x; p >= i; p--)
{
for(int upper = 1; upper < opt[i].size() && upper * i <= p; upper++)
{
dp[p] = max(dp[p],dp[p-upper * i] + opt[i][upper]);
}
}
}
cout << dp[x];
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
solve();
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |