# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
52935 | 2018-06-27T08:12:35 Z | 0^0(#1376) | 조교 (CEOI16_popeala) | C++11 | 20 ms | 3968 KB |
#include <bits/stdc++.h> using namespace std; int n, t, s; const int inf = 2e9 + 5; int p[20005]; int r[55][20005]; int sum[20005]; int q[20005][55]; int dp[2][55][20005]; int ri[55]; deque<int> dq[55]; long long query(int bit, int idx, int l, int r) { for (int i = ri[idx] + 1; i <= r; i++) { while (!dq[idx].empty()&&dp[bit][idx][dq[idx].back()] >= dp[bit][idx][i])dq[idx].pop_back(); dq[idx].push_back(i); } ri[idx] = r; while (!dq[idx].empty()&&dq[idx].front() < l)dq[idx].pop_front(); if (l > r)return inf; return dp[bit][idx][dq[idx].front()]; } void solve(int k) { int now = k & 1; int pre = 1 - now; for (int i = 0; i <= n; i++) { dp[now][i][0] = inf; dq[i].clear(); ri[i] = -1; } for (int i = 1; i <= t; i++) { int c = n; long long val = inf; int ri = i; for(int j=0;j<n;j++){ int le = ri - q[i][j] + 1; val = min(val, query(pre, c, le - 1, ri - 1) + c * sum[i]); c--; ri = le - 1; } val = min(val, query(pre, c, 0, ri - 1)); for (int j = 0; j <= n; j++) dp[now][j][i] = val - j * sum[i]; if (i == t) printf("%lld\n", val); } } int main() { scanf("%d%d%d", &n, &t, &s); for (int i = 1; i <= t; i++) { scanf("%d", &p[i]); sum[i] = sum[i - 1] + p[i]; } for (int i = 0; i < n; i++) { int cnt = 0; for (int j = 1; j <= t; j++) { scanf("%1d", &r[i][j]); if (r[i][j])cnt++; else cnt = 0; q[j][i] = cnt; } } for (int i = 1; i <= t; i++) { sort(q[i], q[i] + n); for (int j = 1; j < n; j++) q[i][j] -= q[i][j - 1]; } for (int i = 1; i <= s; i++) solve(i); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 376 KB | Output is correct |
2 | Incorrect | 3 ms | 868 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 11 ms | 2736 KB | Execution killed with signal 11 (could be triggered by violating memory limits) |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 20 ms | 3968 KB | Execution killed with signal 11 (could be triggered by violating memory limits) |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 376 KB | Output is correct |
2 | Incorrect | 3 ms | 868 KB | Output isn't correct |