//https://www.acmicpc.net/problem/2616 |
#include <iostream> |
#include <algorithm> |
using namespace std; |
int dp[4][50001]; |
int train[50001]; |
int main() |
{ |
int n,m; |
cin >> n; |
for(int i=1; i<=n; i++) |
{ |
int x; |
cin >> x; |
train[i]=train[i-1]+x; |
} |
cin >> m; |
for(int i=1*m; i<=n; i++) |
dp[1][i]=max(train[i]-train[i-m],dp[1][i-1]); |
for(int i=2*m; i<=n; i++) |
dp[2][i]=max(train[i]-train[i-m]+dp[1][i-m],dp[2][i-1]); |
for(int i=3*m; i<=n; i++) |
dp[3][i]=max(train[i]-train[i-m]+dp[2][i-m],dp[3][i-1]); |
cout << dp[3][n]; |
} |
엉망진창으로 풀었네..
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
180126_1065_한수 (0) | 2018.01.26 |
---|---|
180126_2819_격자판의 숫자 이어 붙이기 (0) | 2018.01.26 |
180126_1328_고층 빌딩 (0) | 2018.01.26 |
180125_10835_카드게임 (0) | 2018.01.25 |
180124_10942_팰린드롬? (0) | 2018.01.24 |
//https://www.acmicpc.net/problem/2616 |
#include <iostream> |
#include <algorithm> |
using namespace std; |
int dp[4][50001]; |
int train[50001]; |
int main() |
{ |
int n,m; |
cin >> n; |
for(int i=1; i<=n; i++) |
{ |
int x; |
cin >> x; |
train[i]=train[i-1]+x; |
} |
cin >> m; |
for(int i=1*m; i<=n; i++) |
dp[1][i]=max(train[i]-train[i-m],dp[1][i-1]); |
for(int i=2*m; i<=n; i++) |
dp[2][i]=max(train[i]-train[i-m]+dp[1][i-m],dp[2][i-1]); |
for(int i=3*m; i<=n; i++) |
dp[3][i]=max(train[i]-train[i-m]+dp[2][i-m],dp[3][i-1]); |
cout << dp[3][n]; |
} |
엉망진창으로 풀었네..
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
180126_1065_한수 (0) | 2018.01.26 |
---|---|
180126_2819_격자판의 숫자 이어 붙이기 (0) | 2018.01.26 |
180126_1328_고층 빌딩 (0) | 2018.01.26 |
180125_10835_카드게임 (0) | 2018.01.25 |
180124_10942_팰린드롬? (0) | 2018.01.24 |