码迷,mamicode.com
首页 > 其他好文 > 详细

Div3 595 E

时间:2019-10-26 18:56:30      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:elevator   span   cin   mem   二维   ems   ble   tor   return   

By Elevator or Stairs?

简单的二维DP

$f[i][j] $ 表示第 \(i-1\) 层使用 第\(j\) 种方法达到 第 \(i\) 所需要的最短时间,\(j = 0\) 代表 走楼梯,\(j = 1\) 电梯。

\(f[i+1][0]\) 表示第 \(i\) 层使用 楼梯 到达 第\(i+1\) 层的最短时间

只有当第\(i\) 层走楼梯,第 \(i+1\) 层走电梯的时候,才用加上 \(c\) 它是等待电梯的时候,

如果 第 \(i\) 层已经在电梯里面,第\(i+1\) 不用等电梯就可以上去了,所以不用加 \(c\)

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n,c;
int a[N],b[N],f[N][2]; // f1,0 不在电梯,f1,1 在电梯内
int main(){
    bool ok = 1;
    cin >> n >> c;
    for(int i = 1;i < n; ++i) cin >> a[i];
    for(int i = 1;i < n; ++i) cin >> b[i];
    memset(f,0x3f,sizeof f);
    f[1][0] = 0,f[1][1] = c;
    for(int i = 1;i < n; ++i){
        f[i+1][0] = min(f[i+1][0],f[i][1] + a[i]);
        f[i+1][0] = min(f[i+1][0],f[i][0] + a[i]);
        f[i+1][1] = min(f[i+1][1],f[i][1] + b[i]);
        f[i+1][1] = min(f[i+1][1],f[i][0] + b[i] + c);
    }
    for(int i = 1;i <= n; ++i) cout << min(f[i][0],f[i][1]) <<" ";
    return 0;
}

Div3 595 E

标签:elevator   span   cin   mem   二维   ems   ble   tor   return   

原文地址:https://www.cnblogs.com/lukelmouse/p/11744141.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!