반응형
2차원
#include <bits/stdc++.h>
using namespace std;
int n, m;
int dy[101][1020];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for(int i=1; i<=n ;i++){
int point, time;
cin >> point >> time;
for(int j = time; j<=m; j++){
dy[i][j] = max(dy[i-1][j-time] + point, dy[i-1][j]);
}
}
cout << dy[m];
}
1차원
for문을 뒤에서부터 돌면 해결된다
#include <bits/stdc++.h>
using namespace std;
int n, m;
int dy[1020];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for(int i=1; i<=n ;i++){
int point, time;
cin >> point >> time;
for(int j = m; j>=time; j--){
dy[j] = max(dy[j-time] + point, dy[j]);
}
}
cout << dy[m];
}
반응형
'Algorithm > etc' 카테고리의 다른 글
Segment Tree 구현 코드 C++ (0) | 2022.02.11 |
---|---|
플로이드 워샬 알고리즘이란? (냅색 응용) -모든 정점의 최단 거리 구하기 (0) | 2022.01.28 |
냅색 문제 (0) | 2022.01.26 |
LIS 최대 부분 증가수열 - DP (0) | 2022.01.25 |
랜선자르기, 재귀, 메모이제이션 (0) | 2022.01.24 |