# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
52949 | 2018-06-27T08:31:28 Z | 0^0(#1376) | 조교 (CEOI16_popeala) | C++11 | 414 ms | 19332 KB |
#include <bits/stdc++.h> using namespace std; typedef long long ll; int n, t, s; const ll inf = 0x3f3f3f3f3f3f3f3f; int p[20005]; int r[55][20005]; int sum[20005]; int q[20005][55]; ll dp[2][55][20005]; int ri[55]; int dq[55][20005]; int head[55], tail[55]; long long query(int bit, int idx, int l, int r) { for (int i = ri[idx] + 1; i <= r; i++) { while (tail[idx] - head[idx] && dp[bit][idx][dq[idx][tail[idx] - 1]] >= dp[bit][idx][i])tail[idx]--; dq[idx][tail[idx]++] = i; } ri[idx] = r; while (tail[idx] - head[idx] && dq[idx][head[idx]] < l)head[idx]++; if (l > r)return inf; return dp[bit][idx][dq[idx][head[idx]]]; } void solve(int k) { int now = k & 1; int pre = 1 - now; for (int i = 0; i <= n; i++) { dp[now][i][0] = inf; head[i] = tail[i] = 0; 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]; } memset(dp, 0x3f, sizeof(dp)); for (int i = 0; i <= n; i++) dp[0][i][0] = 0; for (int i = 1; i <= s; i++) solve(i); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 15 ms | 17528 KB | Output is correct |
2 | Incorrect | 17 ms | 17892 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 92 ms | 18364 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 414 ms | 19332 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 15 ms | 17528 KB | Output is correct |
2 | Incorrect | 17 ms | 17892 KB | Output isn't correct |