본문 바로가기
알고리즘

알고리즘 스터디

by COCO1337 2020. 7. 13.

Google KickStart 2020 Round A

Plates

 

총 N개의 Plates 스텍이 있고, 각각 K 개의 plates가 있다.

P개의 Plates를 선택했을때 최댓값을 구하는 문제이다.

 

Limits

Time limit: 20 seconds per test set.
Memory limit: 1GB.
1 ≤ T ≤ 100.
1 ≤ K ≤ 30.
1 ≤ PN * K.
The beauty values are between 1 and 100, inclusive.

 

C++를 사용한 제 풀이입니다.

#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>

using namespace std;

int n, k, p;

void solve() {
	cin >> n >> k >> p;
	vector<vector<int>> a(n, vector<int>(k));
	vector<int> dp(p + 1, 0);

	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < k; ++j) {
			cin >> a[i][j];
		}

		partial_sum(a[i].begin(), a[i].end(), a[i].begin());
		vector<int> tmp = dp;

		for (int l = 0; l < k; ++l) {
			for (int m = l + 1; m <= p; ++m) {
				tmp[m] = max(tmp[m], dp[m - (l + 1)] + a[i][l]);
			}
		}

		dp = tmp;
	}

	cout << dp[p] << "\n";
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int t;
	cin >> t;
	for (int i = 1; i <= t; ++i) {
		cout << "Case #" << i << ": ";
		solve();
	}
}

알고리즘 시간에 배웠던 동적 프로그래밍 0/1 냅색 알고리즘을 떠올려서 어느정도 검색하고 디버그 찍어보면서 풀었다..

아직 너무 어렵다.

반응형

'알고리즘' 카테고리의 다른 글

알고리즘 스터디  (0) 2020.07.16
알고리즘 스터디  (0) 2020.07.15
알고리즘 스터디  (0) 2020.07.09
알고리즘 스터디  (0) 2020.07.09
알고리즘 스터디  (0) 2020.07.07

댓글