제출 #1270698

#제출 시각아이디문제언어결과실행 시간메모리
1270698akari310Feast (NOI19_feast)C++20
12 / 100
22 ms1608 KiB
// Akari - nna310 /* link: https://ideone.com/6pIZZF https://cyboj.ddns.net/problem/dttinh2526_thu2_9_9 */ // #pragma GCC optimize("O3") #include <bits/stdc++.h> #define L(i, j, n) for(int i = j; i <= n; ++i) #define R(i, j, n) for(int i = n; i >= j; --i) #define F(x, c) for(auto &x : c) #define umap unordered_map #define pb push_back #define ve vector #define se second #define fi first #define pe pair using namespace std; using ll = long long; const int N = 300005; const int INF = 1e9; const ll oo = (ll) 1e17 + 5; const int MOD = 1000000007; int dx[4] = {1, -1, 0, 0}; int dy[4] = {0, 0, 1, -1}; int n, k, a[N]; ll t[2005], f[2005][2005], g[2005][2005], res; void sub1() { bool p = false; ll t = 0; L(i, 1, n){ t += a[i]; } ll r1 = 0, r2 = 0; L(i, 1, n) { if (a[i] < 0) { p = true; continue; } if (p) { r2 += a[i]; } else { r1 += a[i]; } } if (k == 1) { res = max({t, r1, r2}); } else { res = r1 + r2; } cout << res; } void sub2() { ll s = 0; L(i, 1, n) { s = s + a[i]; res = max(res, s); } cout << res; } void sub34() { t[0] = 0; L(i, 1, n) t[i] = t[i - 1] + a[i]; L(i, 0, n) { L(j, 0, k) f[i][j] = 0; f[i][0] = 0; // chọn 0 đoạn } L(i, 1, n) { L(sz, 1, k) { // không chọn đoạn kết thúc tại i f[i][sz] = f[i - 1][sz]; // chọn đoạn [j+1..i] làm đoạn thứ sz L(j, 0, i - 1) {// tránh vô nghĩa ll tmp = t[i] - t[j]; // tổng đoạn [j + 1..i] f[i][sz] = max(f[i][sz], f[j][sz - 1] + tmp); } } } cout << f[n][k]; } void sub5() { memset(f, -INF, sizeof(f)); memset(g, -INF, sizeof(g)); L(i, 0, n) { f[i][0] = 0; g[i][0] = 0;} // g[i][sz] — giá trị tối đa khi xét prefix 1..i, đã chọn sz đoạn, // và đoạn thứ sz bắt buộc kết thúc tại i // (tức phần đoạn đang “mở” kết thúc đúng ở vị trí i). // f[i][sz] — giá trị tối đa khi xét prefix 1..i, đã chọn sz đoạn, // không bắt buộc đoạn kết thúc ở i // (tức là tối đa trong mọi phương án chọn sz đoạn chỉ dùng phần tử trong 1..i). L(i, 1, n) { L(sz, 1, k) { // g[i][sz]: đoạn sz kết thúc tại i g[i][sz] = max(f[i - 1][sz - 1], g[i - 1][sz]) + a[i]; // f[i][sz]: tổng lớn nhất với i phần tử, chọn sz đoạn f[i][sz] = max(f[i - 1][sz], g[i][sz]); } } cout << f[n][k]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if (fopen("kd.inp", "r")) { freopen("kd.inp", "r", stdin); freopen("kd.out", "w", stdout); } cin >> n >> k; int d = 0; L(i, 1, n) { cin >> a[i]; if (a[i] < 0) { ++d; } } if (d <= 1) { sub1(); } else if (k == 1) { sub2(); } else { // sub34(); sub5(); } // cout << '\n'; // sub5(); return 0; }

컴파일 시 표준 에러 (stderr) 메시지

feast.cpp: In function 'int main()':
feast.cpp:115:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  115 |                 freopen("kd.inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
feast.cpp:116:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  116 |                 freopen("kd.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...