답안 #52850

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
52850 2018-06-27T05:11:37 Z 윤교준(#1384) 조교 (CEOI16_popeala) C++11
0 / 100
1282 ms 19936 KB
#include <bits/stdc++.h>
#define INF (0x3f3f3f3f)
using namespace std;
typedef long long ll;

const int MAXT = 4005;
const int MAXN = 55;
const int MAXK = 55;

int dp[MAXK][MAXT];

int C[MAXT][MAXT];

bitset<MAXT> B[MAXN];
int BS[MAXN][MAXT];

int S[MAXT];
int A[MAXT];

int N, T, K;

int main() {
	ios :: sync_with_stdio(false);

	cin >> N >> T >> K;
	for(int i = 1; i <= T; i++) cin >> A[i];
	for(int i = 1; i <= N; i++) {
		for(int j = 1; j <= T; j++) {
			char c; scanf(" %c", &c);
			B[i][j] = (bool)(c == '1');
		}
	}

	for(int i = 1; i <= T; i++)
		S[i] = S[i-1] + A[i];
	for(int i = 1; i <= N; i++) {
		for(int j = 1; j <= T; j++)
			BS[i][j] = BS[i][j-1] + (int)B[i][j];
		for(int s = 1; s <= T; s++) for(int e = s; e <= T; e++)
			if(BS[i][e] - BS[i][s-1] == e-s+1)
				C[s][e]++;
	}

	for(int j = 1; j <= K; j++) {
		for(int i = j; i <= T; i++) {
			int t = 2*INF;
			for(int k = j-1; k < i; k++) {
				int r = dp[j-1][k] + (S[i] - S[k]) * C[k+1][i];
				if(r < t) t = r;
			}
			dp[j][i] = t;
		}
	}

	for(int i = 1; i <= K; i++)
		printf("%d\n", dp[i][T]);
	
	return 0;
}

Compilation message

popeala.cpp: In function 'int main()':
popeala.cpp:29:17: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    char c; scanf(" %c", &c);
            ~~~~~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 29 ms 3560 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1282 ms 19936 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -