Submission #671120

#TimeUsernameProblemLanguageResultExecution timeMemory
671120vuavisaoFeast (NOI19_feast)C++14
41 / 100
64 ms30712 KiB
#include<bits/stdc++.h> #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #define ll long long using namespace std; template<typename Lhs, typename Rhs> inline bool Max_self(Lhs &a, Rhs b) { if(b > a) { a = b; return true; } return false; } template<typename Lhs, typename Rhs> inline bool Min_self(Lhs &a, Rhs b) { if(b < a) { a = b; return true; } return false; } const ll N = 3e5 + 10; const ll INF = 1e18; ll n, k, a[N]; namespace sub6 { bool check() { return (n <= 2000); } ll dp[2010][2010]; ll res; void solve() { for(ll gr = 1; gr <= k; ++ gr) { for(ll i = 1; i <= n; ++ i) { Max_self(dp[i][gr], dp[i - 1][gr] + a[i]); Max_self(dp[i][gr], dp[i - 1][gr - 1] + a[i]); } for(ll i = 1; i <= n; ++ i) Max_self(dp[i][gr], dp[i - 1][gr]); Max_self(res, dp[n][gr]); } cout << res; } } namespace last_sub { ll dp[N], cnt[N]; bool check(ll lamba) { ll best[2] = {0, 1}; cnt[0] = 1; for(ll i = 1; i <= n; ++ i) { dp[i] = - INF; Max_self(dp[i], dp[i - 1] + a[i] - lamba); cnt[i] = cnt[i - 1]; if(Max_self(dp[i], dp[best[0]] + a[i] - lamba)) cnt[i] = cnt[best[1]] + 1; cout << i << ": " << dp[i] << ' ' << cnt[i] << '\n'; if(Max_self(best[0], dp[i])) { best[1] = cnt[i]; } } return (cnt[n] <= k); } void solve() { cout << check(0) << '\n'; // ll l = 0, r = INF; // ll lamba = - 1; // while(l <= r) { // ll mid = (l + r) >> 1ll; // if(check(mid)) { // lamba = mid; // r = mid - 1; // } // else l = mid + 1; // } // assert(lamba != - 1); // check(lamba); // cout << dp[n] << ' ' << cnt[n] << '\n'; // cout << dp[n] + lamba * cnt[n]; } } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if (fopen("Feast.inp", "r")) { freopen("Feast.inp", "r", stdin); freopen("Feast.out", "w", stdout); } cin >> n >> k; for(ll i = 1; i <= n; ++ i) cin >> a[i]; if(sub6::check()) { sub6::solve(); return 0; } assert(false); // last_sub::solve(); return 0; } /// Code by vuavisao

Compilation message (stderr)

feast.cpp: In function 'int32_t main()':
feast.cpp:80:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   80 |         freopen("Feast.inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
feast.cpp:81:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   81 |         freopen("Feast.out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...