https://www.acmicpc.net/problem/2616
2616번: 소형기관차
첫째 줄에 기관차가 끌고 가던 객차의 수가 입력된다. 그 수는 50,000 이하이다. 둘째 줄에는 기관차가 끌고 가던 객차에 타고 있는 손님의 수가 1번 객차부터 차례로 입력된다. 한 객차에 타고 있
www.acmicpc.net
비교적 쉬운 dp였습니다. 기차의 길이가 정해져있기때문에 현재에서 기차 길이 이전만큼 위치의 최대값을 참조하여 현재 위치를 끝으로 기차를 한대 세운 값과 현재위치의 기차를 세우지않은 값(바로 전위치까지의 최대값)을 비교하여 dp배열에 기록하여 풀 수 있습니다.
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<string>
#include<iostream>
#include<map>
#include<stack>
using namespace std;
int dp[80000][3];
int arr[80000];
int ps[80000];
int main(){
int N,M;
cin>>N;
int solve=-2e9;
int s=20000;
int temp=0;
for(int x=s;x<N+s;x++){
cin>>arr[x];
temp+=arr[x];
ps[x]=temp;
}
cin>>M;
for(int x=s;x<N+s;x++){
dp[x][0]=max(dp[x-1][0],ps[x]-ps[x-M]);
dp[x][1]=max(dp[x-1][1],dp[x-M][0]+ps[x]-ps[x-M]);
dp[x][2]=max(dp[x-1][2],dp[x-M][1]+ps[x]-ps[x-M]);
solve=max(dp[x][2],solve);
}
cout<<solve;
}
'PS > boj' 카테고리의 다른 글
백준 16117 실버런 (C++) (0) | 2022.06.29 |
---|---|
백준 22345 누적거리 (0) | 2022.06.27 |
백준 1594 전화번호 만들기 (0) | 2022.06.25 |
백준 14905 소수 4개의 합 (0) | 2022.06.24 |
백준 7347 플립과 시프트(C++) (0) | 2021.12.04 |