dp(电梯与楼梯)
http://codeforces.com/problemset/problem/1249/E
2 seconds
256 megabytes
standard input
standard output
You are planning to buy an apartment in a n
-floor building. The floors are numbered from 1 to n
from the bottom to the top. At first for each floor you want to know the minimum total time to reach it from the first (the bottom) floor.
Let:
- ai
for all i from 1 to n−1 be the time required to go from the i-th floor to the (i+1)-th one (and from the (i+1)-th to the i
- -th as well) using the stairs;
- bi
for all i from 1 to n−1 be the time required to go from the i-th floor to the (i+1)-th one (and from the (i+1)-th to the i-th as well) using the elevator, also there is a value c
- — time overhead for elevator usage (you need to wait for it, the elevator doors are too slow!).
In one move, you can go from the floor you are staying at x
to any floor y (x≠y
) in two different ways:
- If you are using the stairs, just sum up the corresponding values of ai
. Formally, it will take ∑i=min(x,y)max(x,y)−1ai
- time units.
- If you are using the elevator, just sum up c
and the corresponding values of bi. Formally, it will take c+∑i=min(x,y)max(x,y)−1bi
- time units.
You can perform as many moves as you want (possibly zero).
So your task is for each i
to determine the minimum total time it takes to reach the i-th floor from the 1
-st (bottom) floor.
The first line of the input contains two integers n
and c (2≤n≤2⋅105,1≤c≤1000
) — the number of floors in the building and the time overhead for the elevator rides.
The second line of the input contains n−1
integers a1,a2,…,an−1 (1≤ai≤1000), where ai is the time required to go from the i-th floor to the (i+1)-th one (and from the (i+1)-th to the i
-th as well) using the stairs.
The third line of the input contains n−1
integers b1,b2,…,bn−1 (1≤bi≤1000), where bi is the time required to go from the i-th floor to the (i+1)-th one (and from the (i+1)-th to the i
-th as well) using the elevator.
Print n
integers t1,t2,…,tn, where ti is the minimum total time to reach the i
-th floor from the first floor if you can perform as many moves as you want.
10 2
7 6 18 6 16 18 1 17 17
6 9 3 10 9 1 10 1 5
0 7 13 18 24 35 36 37 40 45
10 1
3 2 3 1 3 3 1 4 1
1 2 3 4 4 1 2 1 3
0 2 4 7 8 11 13 14 16 17
题意:有n楼,给你1到2,2到3....n-1到n楼的爬楼梯时间和坐电梯时间。从楼梯去坐电梯需要等电梯开门的时间c。问每一楼到一楼的最短时间。
解法:考虑四个转移状态:从楼梯到楼梯,从楼梯到电梯,从电梯到楼梯,从电梯到电梯。
//#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdio.h>
#include <queue>
#include <stack>;
#include <map>
#include <set>
#include <string.h>
#include <vector>
#define ME(x , y) memset(x , y , sizeof(x))
#define SF(n) scanf("%d" , &n)
#define rep(i , n) for(int i = 0 ; i < n ; i ++)
#define INF 0x3f3f3f3f
#define mod 998244353
#define PI acos(-1)
using namespace std;
typedef long long ll ;
ll a[] , b[];
ll dp[][]; int main()
{
ll n , c ;
while(~scanf("%lld%lld" , &n , &c))
{
for(int i = ; i <= n ; i++)
{
scanf("%lld" , &a[i]);
}
for(int i = ; i <= n ; i++)
{
scanf("%lld" , &b[i]);
}
memset(dp , INF , sizeof(dp));
dp[][] = c ;
dp[][] = ;
for(int i = ; i <= n ; i++)
{
dp[i][] = min(dp[i][] , dp[i-][]+a[i]);//电梯到楼梯
dp[i][] = min(dp[i][] , dp[i-][]+a[i]);//楼梯到楼梯
dp[i][] = min(dp[i][] , dp[i-][]+b[i]);//电梯到电梯
dp[i][] = min(dp[i][] , dp[i-][]+b[i]+c);//楼梯到电梯
} for(int i = ; i < n ; i++)
cout << min(dp[i][] , dp[i][]) << " " ;
cout << min(dp[n][] , dp[n][]) << endl ;
} return ;
}
dp(电梯与楼梯)的更多相关文章
- CodeForces - 1249E 楼梯和电梯
题意:第一行输入n和c,表示有n层楼,电梯来到需要时间c 输入两行数,每行n-1个,表示从一楼到二楼,二楼到三楼.....n-1楼到n楼,a[ ] 走楼梯和 b[ ] 乘电梯花费的时间 思路:动态规划 ...
- CodeForces1249E-By Elevator or Stairs?-好理解自己想不出来的dp
Input The first line of the input contains two integers nn and cc (2≤n≤2⋅105,1≤c≤10002≤n≤2⋅105,1≤c≤1 ...
- 兑换零钱-(dp)
https://ac.nowcoder.com/acm/contest/910/B 本以为是组合数,没想到是dp求解,变成水题了,让我想起了第一次见到dp的爬楼梯,可以走一步和走两步,走40步,这里相 ...
- CodeForces round 967 div2 题解(A~E)
本来准备比完赛就写题解的, 但是一拖拖了一星期, 唉 最后一题没搞懂怎么做,恳请大神指教 欢迎大家在评论区提问. A Mind the Gap 稳定版题面 https://cn.vjudge.net/ ...
- codeforces966 A
这题主要就是考虑y1两侧的最近的电梯和楼梯 当时主要是考虑 如果电梯在y1和y2中间的话 那么直接做电梯就是最优解 如果在y2右边就用abs去算 然后发现其实只考虑 y1的左右两边的电梯和楼 ...
- leetcode算法总结
算法思想 二分查找 贪心思想 双指针 排序 快速选择 堆排序 桶排序 搜索 BFS DFS Backtracking 分治 动态规划 分割整数 矩阵路径 斐波那契数列 最长递增子序列 最长公共子系列 ...
- 机器人自主移动的秘密,从SLAM技术说起(一)
博客转载自:https://www.leiphone.com/news/201609/c35bn1M9kgVaCCef.html 雷锋网(公众号:雷锋网)按:本文作者SLAMTEC(思岚科技公号sla ...
- 2.8/4/6/8mm/12mm焦距的镜头分别能监控多大范围?
2.8/4/6/8mm/12mm焦距的镜头分别能监控多大范围? 相关介绍 一.焦距和监控距离的关系 我司IPC镜头焦距有2.8/4mm/6mm/8mm等多种选择,可以满足室内外各种环境的拍摄需求.IP ...
- Leedcode算法专题训练(动态规划)
递归和动态规划都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保存了子问题的解,避免重复计算. 斐波那契数列 1. 爬楼梯 70. Climbing Stairs (Easy) L ...
随机推荐
- “jps”命令的用处?
jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号. jps相当于Solaris进程工具ps.不像”pgrep java” 或”ps -ef grep java”,jp ...
- Django【第11篇】:Django之分页升级版本(组件)
分页组件 一.分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(s ...
- Python---面向对象编程---自定义列表和集合操作类
一.定义一个列表的操作类Listinfo 包括的方法 1.列表元素添加:add_key() 添加的必须是数字或者是字符串 2.列表元素取值:get_key() 3.列表合并:update_list( ...
- Apach Hadoop 与 CDH 区别
1.Apache Hadoop 不足之处 • 版本管理混乱 • 部署过程繁琐.升级过程复杂 • 兼容性差 • 安全性低 2.Hadoop 发行版 • Apache Hadoop • Cloudera’ ...
- HDU 2296 Ring ( Trie图 && DP && DP状态记录)
题意 : 给出 m 个单词,每一个单词有一个权重,如果一个字符串包含了这些单词,那么意味着这个字符串拥有了其权重,问你构成长度为 n 且权重最大的字符串是什么 ( 若有权重相同的,则输出最短且字典序最 ...
- Linux shell - ps,wc命令用法
例1. 查看Oracle数据库活动进程LOCAL=NO,输出行数 oracle@sha> ps -ef|grep LOCAL=NO|wc -l 15 解释:ps -ef是查看所有的进程的 然后用 ...
- 深入探究JVM(2) - 探秘Metaspace
Java 8彻底将永久代移除出了HotSpot JVM,将其原有的数据迁移至Java Heap或Metaspace.这一篇文章我们来总结一下Metaspace(元空间)的特性.如有错误,敬请指出,谢谢 ...
- SecureCRT上传、下载文件 使用rz【上传】& sz【下载】命令
首先安装:apt-get install lrzsz SecureCRT这款SSH客户端软件同时具备了终端仿真器和文件传输功能.比ftp命令方便多了,而且服务器不用再开FTP服务了.rz,sz是便是L ...
- ORACLE Physical Standby DG 之fail over
SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;确认下是否存在日志间隙,发现gap现象,说明failo ...
- js将html转换为纯文本
document.body.textContent//firefox浏览器 document.body.innerText//适用ie webkit浏览器 document.body.innerHTM ...