https://www.acmicpc.net/problem/11048
N제한이 1000까지 있어서 입력받는 데만 O(N^2)의 시간이 걸린다.
dp를 통해서 문제를 해결해야 한다.
입력을 받을 때 마다 dp[i][j]의 값을 업데이트 해야 하는데
가져갈 수 있는 사탕의 최대값은 (i,j)의 사탕 개수에서
(i-1,j) / (i,j-1) / (i-1,j-1)의 사탕 개수의 최대값을 더해주면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ int N,M; cin>>N>>M; vector<vector<int>> dp(N+1,vector<int>(M+1,0)); for(int i=1;i<=N;i++) for(int j=1;j<=M;j++){ scanf("%d",&dp[i][j]); dp[i][j]+=max(dp[i-1][j-1],max(dp[i-1][j],dp[i][j-1])); } cout<<dp[N][M]<<endl; return 0; } | cs |
'알고리즘(BOJ) > DP' 카테고리의 다른 글
백준 1699번 - 제곱수의 합 (0) | 2018.01.29 |
---|---|
백준 2133번 - 타일 채우기 (4) | 2018.01.29 |
백준 11057번 - 오르막 수 (0) | 2018.01.28 |
백준 2294번 - 동전 2 (0) | 2018.01.28 |
백준 9461번 - 파도반 수열 (0) | 2018.01.28 |