일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 파이썬 강좌
- python 강좌
- 슬픔
- 계획
- 공부
- 철학
- 다이나믹프로그래밍
- 파이썬
- dp
- 머신러닝
- 2020
- python 강의
- 라즈베리파이3
- it
- BOJ
- mmdetection
- 프로그래밍
- 강좌
- 자작시
- 강의
- python
- 라즈베리파이
- C++
- 백준
- dynamic programming
- mmcv
- 알고리즘
- 파이썬 강의
- 2021
- 라즈베리파이 모니터
Archives
- Today
- Total
Stargazer
[백준] 7579번 : 앱 c++ (DP) 본문
반응형
솔직히 DP는 매번 접근법을 잘 모르겠다...
대충 느낌은 DP 일거라 생각이 들지만 어떻게 해야할 지는 상세히는 모르겠다.
(열심히 공부하자..ㅠㅠ)
접근:
이전 결과를 이용하여 현재 결과를 결정하는 방식으로 풀 수 있기 때문에 DP로 풀면된다.
전략:
이전 정보를 저장하는 dp[101][10000] 배열을 만들고, 매 앱을 하나씩 확인하면서, 이전 상태를 참고하여 앱의 cost를 선택하거나 선택하지 않았을때의 최대 확보 할 수 있는 메모리를 비교한다. 끝에는 모든 앱을 비교한 상태들 중 cost가 가장 작은 것을 선택한다.
코드:
#include <iostream>
#include <vector>
using namespace std;
int n,m;
struct App{
int mem;
int cost;
};
vector<App> app;
int dp[101][10001]; // n , c
void print(){
for(int i=0;i <n ;i++){
cout << app[i].mem << ' '<< app[i].cost << '\n';
}
}
int main(){
cin >> n >> m;
app.resize(n+1);
for(int i=1;i<=n;i++){
cin >> app[i].mem;
}
for(int i=1;i<=n;i++){
cin >> app[i].cost;
}
int res = 1000000000;
for(int i=1;i<=n;i++){
for(int j=1;j<=10000;j++){
if(j - app[i].cost >= 0 ){
dp[i][j] = max(dp[i][j], dp[i-1][j-app[i].cost] + app[i].mem);
}
dp[i][j] = max(dp[i][j], dp[i-1][j]);
if(dp[i][j] >= m) res = min(res , j);
}
}
// print();
cout << res << '\n';
return 0;
}
반응형
'Undergraudate basics(학부생 기초) > 자료구조, 알고리즘' 카테고리의 다른 글
[백준] 9328번 : 열쇠 c++ 풀이(BFS) (0) | 2022.07.12 |
---|---|
[백준] 9019번 : DSLR (BFS - Queue) (0) | 2022.07.11 |
[백준] 5430번 : AC (deque (or vector)) (0) | 2022.07.09 |
[백준] 2473번 : 세 용액 C++ (두 포인터) (0) | 2022.07.09 |
[백준] 2252번 : 줄 세우기 C++ (위상정렬) (0) | 2022.07.05 |
Comments