zoukankan      html  css  js  c++  java
  • Codeforces Round #595 (Div. 3) E. By Elevator or Stairs?

    题目地址:http://codeforces.com/contest/1249/problem/E

    题意:有n层楼,上楼有楼梯和电梯两种方法,从 i 到 i+1 层有不同花费,用电梯有等电梯门开的时间,但上一次用的电梯就不用等这个时间。问去每层楼的最小花费。

    思路:很基础的dp题,dp [ i ] [ 0 ] 表示一楼到 i楼的总时间,其中从 i - 1 楼到 i 楼用的是楼梯,dp [ i ] [ 1 ] 表示从一楼到 i 楼的总时间,其中 i - 1 到 i 楼用的电梯。

    AC代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 typedef long long ll;
     7 const int N=2e5+5;
     8 ll n,c,a[N],b[N],dp[N][2];
     9 void sol(){
    10 
    11     cin>>n>>c;
    12     for(int i=2;i<=n;i++) cin>>a[i];
    13     for(int i=2;i<=n;i++) cin>>b[i];
    14 
    15     dp[1][0]=0;     //初始化,一楼直接是0时间,且不能有用过电梯这个状态
    16     dp[1][1]=2e8+10;
    17 
    18     for(int i=2;i<=n;i++){      //转移方程
    19         dp[i][0]=min(dp[i-1][0]+a[i],dp[i-1][1]+a[i]);
    20         dp[i][1]=min(dp[i-1][0]+b[i]+c,dp[i-1][1]+b[i]);    //前一层用过电梯就不用加c这个等门时间了
    21     }
    22     for(int i=1;i<=n;i++){  //取小的就OK了
    23         ll ans=min(dp[i][0],dp[i][1]);
    24         cout<<ans<<" ";
    25     }
    26 }
    27 int main(){
    28     sol();
    29     return 0;
    30 }
  • 相关阅读:
    简单登录接口
    While循环猜年龄
    linux全面详细转载文章
    ansible
    Python之OS模块函数
    Python脚本-自动下载安装
    LVS(3种模式+10种调度算法)
    Dockerfile构建镜像
    Docker简易安装及命令实例
    find命令实例
  • 原文地址:https://www.cnblogs.com/xunzf0402/p/11734678.html
Copyright © 2011-2022 走看看