-
백준 11052 - 카드 구매하기백준 algorithm 2020. 4. 14. 15:42반응형
=> DP 문제입니다.
=> 카드 i개를 구매할 때의 최대 비용을 생각해야 합니다.
=> D[i] : 카드 i개 구매하는 최대 비용
=>카드 i개를 구매하는 방법의 가짓수
-
카드 1개 들어있는 카드팩 구매, 카드 i - 1개 구매
-
카드 2개 들어있는 카드팩 구매, 카드 i - 2개 구매
-
....
-
....
-
....
-
카드 i 개 들어있는 카드팩 구매, 카드 0개 구매
이를 나타내면
-
P[1] + D[i-1]
위와 같이 표현할 수 있습니다.
이를 코드로 표현하면
for(int i=1; i<=N; i++ ) { for( int j=1; j <= i; j++) { D[i] = max(D[i], D[i - j] + P[j]); } }
위와 같은 코드가 됩니다.
#include <iostream> #include <algorithm> #include <string> #include <vector> #include <list> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N; cin >> N; vector<int> P(N+1); vector<int> D(N+1); int tmp; for(int i=1; i<= N; i++) { cin >> tmp; P[i] = tmp; } for(int i=1; i<=N; i++ ) { for( int j=1; j <= i; j++) { D[i] = max(D[i], D[i - j] + P[j]); } } cout <<D[N] <<'\n'; }
반응형'백준 algorithm' 카테고리의 다른 글
백준 15990 - 1, 2, 3 더하기 5 (0) 2020.04.23 백준 16194 - 카드 구매하기 2 (0) 2020.04.15 백준 11726 - 2 x n 타일링 (c+ (0) 2020.04.06 백준 1463 - 1로 만들기 (0) 2020.04.06 백준 11653 - 소인수분해 (2) 2020.04.05 -