제출 #125888

#제출 시각아이디문제언어결과실행 시간메모리
125888tutis조교 (CEOI16_popeala)C++17
17 / 100
2066 ms5996 KiB
/*input 2 3 3 4 3 5 101 110 */ #pragma GCC optimize ("O3") #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; const ll modulo = 1000000007; struct line { ll k; ll b; // kx + b }; struct ST { int l, r; vector<line>K; ST *left; ST *right; ll ans[51]; ST(int l, int r): l(l), r(r) { if (l < r) { left = new ST(l, (l + r) / 2); right = new ST((l + r) / 2 + 1, r); } } void fix(const vector<line>a) { if (l < r) { left->fix(a); right->fix(a); for (int x = 0; x <= 50; x++) ans[x] = min(left->ans[x], right->ans[x]); } else { for (int x = 0; x <= 50; x++) { ans[x] = a[l].k * x + a[l].b; } } } ll mini(int x, int y, ll xx) { if (x <= l && r <= y) return ans[xx]; if (r < x || y < l) return 1e15; return min(left->mini(x, y, xx), right->mini(x, y, xx)); } }; int main() { ios_base::sync_with_stdio(false); ll N, T, S; cin >> N >> T >> S; ll p[T + 1]; p[0] = 0; for (ll i = 1; i <= T; i++) { cin >> p[i]; p[i] += p[i - 1]; } string res[N]; for (ll i = 0; i < N; i++) cin >> res[i]; ll dp[S + 1][T + 1]; for (ll a = 0; a <= S; a++) { for (ll b = 0; b <= T; b++) { dp[a][b] = 1e11; } } dp[0][0] = 0; int kada[T + 1][N + 1]; for (int i = 0; i <= N; i++) kada[0][i] = 0; for (ll b = 1; b <= T; b++) { for (ll i = 0; i < N; i++) { if (res[i][b - 1] == '0') { kada[b][i] = b; } else kada[b][i] = kada[b - 1][i]; } kada[b][N] = b; } for (ll b = 1; b <= T; b++) sort(kada[b], kada[b] + N + 1); ST medis(0, T); for (int c = 1; c <= S; c++) { vector<line>aaa; for (int a = 0; a <= T; a++) { aaa.push_back(line()); aaa.back().b = dp[c - 1][a]; aaa.back().k = -p[a]; } medis.fix(aaa); for (int b = 1; b <= T; b++) { int l = 1; for (int x = 0; x <= N; x++) { int r = kada[b][x]; ll mini = medis.mini(l - 1, r - 1, x); dp[c][b] = min(dp[c][b], mini + x * p[b]); l = r + 1; } } } for (ll c = 1; c <= S; c++) { cout << dp[c][T] << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...