zoukankan      html  css  js  c++  java
  • 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])<<" ";
        }
    } 
    rush!
  • 相关阅读:
    c++笔试题3
    C++笔试题
    C++编程指南续(10-11)
    C++详解(8-9)
    C++编程指南(6-7)
    C++编程指南续(4-5)
    C++编程指南续
    C++的编程指南
    HPSocket介绍与使用
    WinForm中TreeView控件实现鼠标拖动节点(可实现同级节点位置互换,或拖到目标子节点)
  • 原文地址:https://www.cnblogs.com/LH2000/p/12594670.html
Copyright © 2011-2022 走看看