답안 #24747

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
24747 2017-06-12T18:18:35 Z Bruteforceman 조교 (CEOI16_popeala) C++11
17 / 100
403 ms 19976 KB
#include "bits/stdc++.h"
using namespace std;
#define prev sdkjflksd

int points[20010];
int pref[20010];

int result[55][20010];
int prev[55][20010];
vector <int> v[20010];

int dp[55][20010];
const int inf = 2e9;

int maxn[55][20010];

int main(int argc, char const *argv[])
{
	int N, T, S;
	scanf("%d %d %d", &N, &T, &S);

	for(int i = 1; i <= T; i++) {
		scanf("%d", &points[i]);
		pref[i] = pref[i - 1] + points[i];
	}
	for(int i = 1; i <= N; i++) {
		char *s;
		s = new char [T];
		scanf("%s", s);
		for(int j = 1; j <= T; j++) {
			result[i][j] = s[j-1] - '0';
		}
		delete s;
	} 
	for(int i = 1; i <= N; i++) {
		for(int j = 1; j <= T; j++) {
			if(result[i][j] == 1) {
				prev[i][j] = 1 + prev[i][j - 1];
			} else {
				prev[i][j] = 0;
			}
		}
	}
	for(int i = 1; i <= T; i++) {
		vector <int> h;
		for(int j = 1; j <= N; j++) {
			h.push_back(prev[j][i]);
		}
		sort(h.begin(), h.end());
		reverse(h.begin(), h.end());
		for(auto j : h) {
			v[i].push_back(i - j);
		}
		v[i].push_back(i);
	}

	dp[0][0] = 0;
	for(int i = 1; i <= T; i++) {
		dp[0][i] = inf;
	}
	for(int i = 1; i <= S; i++) {
		dp[i][0] = inf;
		for(int j = 1; j <= T; j++) {
			dp[i][j] = inf;
			for(int x = 0; x < (int) v[j].size(); x++) {
				for(int k = 0; k < v[j][x]; k++) {
					dp[i][j] = min(dp[i][j], dp[i - 1][k] + (pref[j] - pref[k]) * x);
				}
			}
		}
	}
	for(int i = 1; i <= S; i++) {
		printf("%d\n", dp[i][T]);
	}
	return 0;
}

Compilation message

popeala.cpp: In function 'int main(int, const char**)':
popeala.cpp:20:31: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d", &N, &T, &S);
                               ^
popeala.cpp:23:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &points[i]);
                          ^
popeala.cpp:29:17: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%s", s);
                 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 19844 KB Output is correct
2 Correct 0 ms 19844 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 403 ms 19976 KB Output is correct
2 Correct 353 ms 19976 KB Output is correct
3 Correct 379 ms 19976 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 0 ms 19844 KB Execution killed because of forbidden syscall writev (20)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 19844 KB Output is correct
2 Correct 0 ms 19844 KB Output is correct
3 Correct 403 ms 19976 KB Output is correct
4 Correct 353 ms 19976 KB Output is correct
5 Correct 379 ms 19976 KB Output is correct
6 Runtime error 0 ms 19844 KB Execution killed because of forbidden syscall writev (20)
7 Halted 0 ms 0 KB -