14501_퇴사

이준혁·2025년 12월 2일

code

목록 보기
6/7

예제 입력 1
7
3 10
5 20
1 10
1 20
2 15
4 40
2 200
예제 출력 1
45

예제 입력 2
10
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
예제 출력 2
55

예제 입력 3
10
5 10
5 9
5 8
5 7
5 6
5 10
5 9
5 8
5 7
5 6
예제 출력 3
20

예제 입력 4
10
5 50
4 40
3 30
2 20
1 10
1 10
2 20
3 30
4 40
5 50
예제 출력 4
90

공부 노트

vector로 여러가지 배열 만들기

  • c도 파이썬 같이 배열안에 원하는 만큼 만들면 좋을것 같아서 찾아봄
#include <iostream>
#include <vector>
using namespace std;

int count_num;
int k;  // 한 줄에 입력될 데이터 개수
vector<vector<int>> layer;

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

    cin >> count_num >> k;  // 예: 7 3 (7줄, 한 줄에 3개씩 입력)

    layer.resize(count_num, vector<int>(k));

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

핵심적인부분이

    layer.resize(count_num, vector<int>(k));

    for(int i = 0; i < count_num; i++) {
        for(int j = 0; j < k; j++) {
            cin >> layer[i][j];

이부분인데 이렇게 받은 값을

vector<int>(k)

로 하면 여러개를 받을수 있음

코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int count_num;

vector<pair<int, int>> layer;

int* dp;

void soultion_get(const vector<pair<int,int>>& layer)
{
    int max_pay = 0;
    for(int i=0;i<count_num;i++)
    {   
        dp[i+1]=max(dp[i+1],dp[i]);
        int time = layer[i].first;
        int pay = layer[i].second;
        
        int pass = time+i;

        if(pass<=count_num)
        {
            dp[pass] = max(dp[pass],dp[i]+pay);
        }
    }
    cout<<dp[count_num]<<"\n";
}

int main()
{
    ios_base::sync_with_stdio(0);

    cin >> count_num;

    layer.resize(count_num);

    dp = new int[count_num+1];

    for(int i = 0 ; i<count_num;i++)
    {
        cin >> layer[i].first>>layer[i].second;
    }
    
    for(int i = 0 ; i<count_num;i++)
    {
        dp[i] = 0;
    }

    soultion_get(layer);

}

참고

https://codejin.tistory.com/173

profile
#자기공부 #틀린것도많음 #자기개발 여러분 인생이 힘들다 하더라도 그것을 깨는 순간 큰 희열감으로 옵니다~

0개의 댓글