알고리즘 문제 해결/BOJ

[DP] BOJ 7579 앱 (C++)

jmkimmessi 2022. 10. 5. 00:00
반응형

https://www.acmicpc.net/problem/7579

 

7579번: 앱

입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활

www.acmicpc.net

 

문제 해결 알고리즘

 

dp[i][j]에서 i는 배열의 i번째 원소 까지라는 뜻이고 j는 시간이다. 

dp[i][j]는 i번째까지의 원소들 중에서 j시간을 썼을 때, 최대 메모리이다.

 

소스 코드

 

#include <bits/stdc++.h>
using namespace std;

int N, M;

int Byte[101], Time[101], dp[101][10001], Sum = 0;

int main(){

    cin >> N >> M;

    for(int i=1;i<=N;i++) cin >> Byte[i];
    for(int i=1;i<=N;i++){
        cin >> Time[i];
        Sum += Time[i];
    } 

    for(int i=1;i<=N;i++){
        for(int j=0;j<=Sum;j++){

            if(j - Time[i] >= 0) dp[i][j] = max(dp[i][j], dp[i-1][j-Time[i]] + Byte[i]);
            dp[i][j] = max (dp[i][j], dp[i-1][j]);

        }
    }
	
    
  for (int i=0;i<=Sum;i++){
	if (dp[N][i] >= M){
		cout << i;
    		break;
	}	
  }
    


}
반응형