
예제 입력 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
#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);
}
참고