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 ...
随机推荐
- 安装win10笔记
1.使用pe安装的时候,要利用winNTSetup安装 2. 3.引导和安装驱动器都选择c盘 4.版本选择教育版,专业版photoshop 不好使.
- 可决系数R^2和方差膨胀因子VIF
然而很多时候,被筛选的特征在模型上线的预测效果并不理想,究其原因可能是由于特征筛选的偏差. 但还有一个显著的因素,就是选取特征之间之间可能存在高度的多重共线性,导致模型对测试集预测能力不佳. 为了在筛 ...
- Linux学习-通过loganalyzer展示MySQL中rsyslog日志
一.实验环境 系统:CentOS7.6 软件包:apache,php,mariadb-server (都是基于光盘yum源) 源码包:loganalyzer-4.1.7.tar.gz (http:// ...
- 最大流 && 最小费用最大流模板
模板从 这里 搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) ; const int INF = 0x3f3f3f3f; struct Edge { int from ...
- 【CF1237D】Balanced Playlist(set,二分,线段树)
题意:给定一个n首歌的播放列表,第i首的值为a[i],听完第i首会回到第1首 现在从每首开始往下,记录听过的最大值,如果当前听的值严格小于听过最大值的一半则停止 问从每首歌开始往下听能听几首,不会停止 ...
- http协议的深刻理解
https://www.cnblogs.com/mayite/p/9095986.html
- RedisTemplate访问Redis数据结构(五)——ZSet
Redis 有序集合和无序集合一样也是string类型元素的集合,且不允许重复的成员.不同的是每个元素都会关联一个double类型的分数.有序集合的成员是唯一的,但分数(score)却可以重复.red ...
- fastjson学习笔记
先来说说什么是 JSON 吧. JSON:JavaScript对象表示法(JavaScript Object Notation).JSON 是存储和交换文本信息的语法.JSON 语法是 JavaScr ...
- RHEL6 kernel bug在hadoop上的测试
最近给hadoop集群升级了RHEL6,发现性能比之前的差了不少.发现淘宝内核组发现并解决了这个问题 原文链接:http://blog.donghao.org/2013/03/20/hadoop%E9 ...
- 深入探究JVM(1) - Java的内存区域解析
http://blog.csdn.net/sczyh22/article/details/46652901<br>Java 虚拟机在执行Java程序的时候会把它管理的内存区域划为几部分,这 ...