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

Posted lh2000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了E. By Elevator or Stairs?.Codeforces Round #595 (Div. 3)相关的知识,希望对你有一定的参考价值。

前言

有一说一,这是我做过最简单的一道E题

题意

告诉你有个大楼,然后让你求出从一楼到每一楼的最短时间。其中,上楼有两种方式1.走楼梯2.坐电梯。楼梯可以直接走,电梯需要一个等待时间。数据给出层与层之间不算等待时间的两种方式上楼所需的时间。

做法

很容易想到dp,而且是最基础的dp(估计div3也就敢这么出个算法题)

状态dp[i][0]表示走楼梯上到i层所需的最短时间。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<bits/stdc++.h>
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<<min(dp[i][0],dp[i][1])<<" ";
    }
} 

 

以上是关于E. By Elevator or Stairs?.Codeforces Round #595 (Div. 3)的主要内容,如果未能解决你的问题,请参考以下文章

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

Codeforces 1249E By Elevator or Stairs? 题解

CF1249E By Elevator or Stairs (dp状态机模型)

[题解]Mail.Ru Cup 2018 Round 1 - A. Elevator or Stairs?

70. Climbing Stairs

[Leetcode] Climbing Stairs