E. By Elevator or Stairs?.Codeforces Round #595 (Div. 3)

3797 단어

전언


하나 말하자면, 이것은 내가 해 본 것 중 가장 간단한 E문제이다

제목의 뜻


빌딩이 있다고 말하고 1층에서 1층까지의 가장 짧은 시간을 구해 달라고 하세요.그 중에서 위층에는 두 가지 방식이 있다.계단을 걷다엘리베이터를 타다.계단은 바로 갈 수 있고 엘리베이터는 대기 시간이 필요하다.데이터는 층과 층 사이의 대기 시간을 계산하지 않는 두 가지 방식으로 위층에 올라가는 데 필요한 시간을 제공한다.

방법


dp를 생각하기 쉽고 가장 기초적인 dp(div3도 감히 이렇게 알고리즘 문제를 낼 수 있을 것 같다)
상태 dp[i][0]는 계단을 올라가는 데 필요한 가장 짧은 시간을 나타낸다.dp[i][1]은 엘리베이터를 탈 때 i층으로 올라가는 데 걸리는 가장 짧은 시간을 나타낸다.

전이 방정식


dp[i][0]=min(dp[i-1][0],dp[i-1][1])+a[i-1][0]; dp[i][1]=min(dp[i-1][0]+a[i-1][1]+m,dp[i-1][1]+a[i-1][1]);

코드

#include
using namespace std;
int n,m;
int a[200005][2];
int dp[200005][2];
int main(){
    cin>>n>>m;
    for(int i=1;i<=n-1;i++){
        cin>>a[i][0];
    }
    for(int i=1;i<=n-1;i++){
        cin>>a[i][1];
    }
    dp[2][0]=a[1][0];
    dp[2][1]=a[1][1]+m;
    for(int i=3;i<=n;i++){
        dp[i][0]=min(dp[i-1][0],dp[i-1][1])+a[i-1][0];
        dp[i][1]=min(dp[i-1][0]+a[i-1][1]+m,dp[i-1][1]+a[i-1][1]);
    }
    for(int i=1;i<=n;i++){
        cout<0],dp[i][1])<<" ";
    }
} 

좋은 웹페이지 즐겨찾기