본문 바로가기

백준

2662 기업투자

디피 문제인 건 바로 눈치 챘는데 식 세우는게 너무너무 힘들었다.

 

기업이 여러개일 때 어떻게 할지 엄청 고민했음. 

 

 

 

이건 예시로 잡은 거

 

 

 

예시가 들어왔을 때 최댓값

 

A는 자신의 윗 칸이랑 현재 비용이랑 비교하는 것 같고.. B는 옆 칸이랑 현재비용이랑 비교하면 될 것 같다,,

 

근데 이렇게 하니 최댓값이 안 나오는 것 같다. 

 

 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
 
using namespace std;
using i64 = long long;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;


int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    
    vector<vector<int> > v(n + 1, vector<int>(m, 0));
    for (int i = 1; i <= n; i++)
    {
        int tmp;
        scanf("%d", &tmp);
        for (int j = 0; j < m; j++)
        {
            scanf("%d", &v[i][j]);
        }
    }
    
    vector<vector<int> > dp(n + 1, vector<int>(m, 0));
    for (int i = 1; i <= n; i++)
    {
        dp[i][0] = max(dp[i-1][0], v[i][0]);
        for (int j = 1; j < m; j++)
        {
            dp[i][j] = max(dp[i][j-1], v[i][j]);
        }
    }
    
    for (int i = 1; i <= n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            printf("%d ", dp[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

 

ㅠㅠㅠ 이거 돌려보면 아래처럼 나온다. 

3, 2에 10이 아니고 9가 들어갔다. 옆 칸인 7이랑 현재 값인 9랑 비교해서 9가 들어갔구나...

 

이렇게 하면 안 될 것 같다. 

 


 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
 
using namespace std;
using i64 = long long;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;


int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    
    vector<vector<int> > v(n + 1, vector<int>(m + 1, 0));
    for (int i = 1; i <= n; i++)
    {
        int tmp;
        scanf("%d", &tmp);
        for (int j = 1; j <= m; j++)
        {
            scanf("%d", &v[i][j]);
        }
    }
    
    vector<vector<int> > dp(n + 1, vector<int>(m, 0));
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            dp[i][j] = max(dp[i][j - 1], v[i][j]);
            for (int k = 1; k <i; k++)
            {
                dp[i][j] = max(dp[i][j], dp[k][j - 1] + v[i - k][j]);
            }
        }
    }

    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            printf("%d ", dp[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

 

 으음....... 최댓값은 구했는데 백트레킹이 문제다...,.,,.,. ㅜㅠㅜㅠㅠㅠㅜㅠㅠㅡㅜ

 

 

 

 

'백준' 카테고리의 다른 글

2108 통계학  (0) 2020.08.23
3018 캠프파이어  (0) 2020.08.11
6416 트리인가?  (0) 2020.08.08
14437 준오는 심술쟁이!!  (0) 2020.08.07
2527 직사각형  (0) 2020.08.07