Submission #434136

#TimeUsernameProblemLanguageResultExecution timeMemory
434136krist7599555Jelly Flavours (IOI20_jelly)C++17
100 / 100
56 ms452 KiB
#include <algorithm> #include <cassert> #include <cstring> #include <vector> #include <numeric> #include <iostream> #include <tuple> typedef std::vector<int> Vec; #define rep(i,a,b) for(auto i = a; i != b; ++i) auto ckmax = [](auto& a, const auto& b) { return b>a?a=b,1:0; }; auto ckmin = [](auto& a, const auto& b) { return b<a?a=b,1:0; }; const int MN = 2e3+10; const int MV = 1e4+10; struct Data { public: int jelly_count, remain_b_value; Data inc() {return {jelly_count+1, remain_b_value};} Data buy(int cost) { return {jelly_count+1, remain_b_value - cost};} bool operator < (const Data& o) const { return std::tie(jelly_count, remain_b_value) < std::tie(o.jelly_count, o.remain_b_value); } }; Data dp[MV]; int find_maximum_unique(int xn, int yn, std::vector<int> an, std::vector<int> bn) { int N = an.size(); std::vector<int> ord(N); std::iota(ord.begin(), ord.end(), 0); std::sort(ord.begin(), ord.end(), [&](int u, int v){return bn[u] < bn[v];}); std::fill_n(dp, xn+1, Data({ 0, yn })); for (int i = 0; i != N; ++i) { int curr_a = an[ord[i]]; // a = ? ? ? ? ? int curr_b = bn[ord[i]]; // b = 1 2 3 4 5 for(int ai = 0; ai <= xn; ++ai) { if (dp[ai].remain_b_value >= curr_b) dp[ai] = dp[ai].buy(curr_b); if (ai + curr_a <= xn) { dp[ai] = std::max(dp[ai], dp[ai + curr_a].inc()); } } } return dp[0].jelly_count; } inline int input() { int i; std::cin >> i; return i; } #ifdef KRIST_LOCAL int main() { assert(4 == find_maximum_unique(6, 12, Vec({5, 1, 5, 6, 3}), Vec({3, 5, 4, 6, 7}))); puts("pass"); // using namespace std; // cin.sync_with_stdio(0); // int n = input(); // int x = input(); // int y = input(); // std::vector<int> xn(n); // std::vector<int> yn(n); // rep(i, 0, n) xn[i] = input(); // rep(i, 0, n) yn[i] = input(); // cout << find_maximum_unique(x, y, xn, yn); } #endif
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...