NYOJ 诡异的电梯

诡异的电梯【Ⅰ】

时间限制:1000 ms  |  内存限制:65535 KB

难度:3

描述

新的宿舍楼有 N(1≤N≤100000) 层 and M(1≤M≤100000)个学生. 在新的宿舍楼里, 为了节约学生的时间也为了鼓励学生锻炼身体, 所以规定该宿舍楼里的电梯在相邻的两层之间是不会连续停下(即,如果在第2层停下就不能在第3层停下。).所以,如果有学生在相邻的两层之间要停下, 则其中的一部分学生必须选择走楼梯来代替。规定:一个人走下一层楼梯的花费为A,走上一层楼梯的花费为B。(1≤A,B≤100)现在请你设计一个算法来计算出所有学生走楼梯花费的最小费用总和。 所有的学生一开始都在第一层,电梯不能往下走,在第二层的时候电梯可以停止。

输入
输入有几组数据T。T(1≤T≤10)
每组数据有N (1≤N≤100000),M(1≤M≤100000),A,B(1≤A,B≤100)。
接下来有M个数字表示每个学生想要停的楼层。

输出
输出看样例。
样例输入
1
3 2 1 1
2 3
样例输出
Case 1: 1题目讲解:题目的状态转移方程是比较难想,但是画一下图就能发现转移方程;下面图解now代表当前的楼层:到达每一个楼层,共有下面四种情况;


AC代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<queue>
 6 #include<string>
 7 #include<cmath>
 8 using namespace std;
 9 const int N = 1e5+10;
10 const int MAX=0x3fffffff;
11 int dp[N],ma[N];
12 int main()
13 {
14   int T,m,n,down,up,cout=1;
15   scanf("%d",&T);
16   while(T--)
17   {
18       int x;
19       memset(ma,0,sizeof(ma));
20       fill(dp,dp+N,MAX);
21       dp[0]=dp[1]=dp[2] = 0;
22       scanf("%d %d %d %d",&n,&m,&down,&up);
23       int ab = min(down,up);
24       for(int i = 1;i<=m; i++)
25       {
26           scanf("%d",&x);
27           ma[x]++;
28       }
29          for(int i = 3; i<=n; i++)
30          {
31              dp[i] =min( dp[i],dp[i-2]+ma[i-1]*ab);
32              if(i>=4)
33              {
34                  int temp = MAX;
35                  temp = min(ma[i-2]*up*2+ma[i-1]*up,ma[i-2]*down+ma[i-1]*down*2);//同上同下
36                  temp = min(temp,ma[i-2]*down+ma[i-1]*up);//一下一上
37                  temp = min(temp,ma[i-2]*2*up+ma[i-1]*down*2);//一上一下
38                  dp[i]=min(dp[i],temp+dp[i-3]);
39              }
40          }
41       printf("Case %d: %d\n",cout++,dp[n]);
42   }
43   return 0;
44 }

时间: 2024-08-05 15:20:57

NYOJ 诡异的电梯的相关文章

nyoj 1070 诡异的电梯【Ⅰ】【dp】

题目:nyoj 1070 诡异的电梯[Ⅰ] 这个题目源自湘潭大学oj 1206 Dormitory's Elevator 是当时比赛的题目,题目都没有读清楚啊. 分析:这其实就是一个简单的一维dp,用dp[i]表示从1层上到第 i 层花费的最小的体力. 因为不能在相邻的楼层停留,所以可以从dp[i-2]转移,但这样不是最优的还要从dp[i-3]转移,因为这样的话就可以到达所有的楼层.我们只要在所有的之间dp最优即可. 其他要注意的一个条件是,从dp[i-3]转移时,中间两层的人有四种选择: 1:

NYIST 1070 诡异的电梯【Ⅰ】

诡异的电梯[Ⅰ]时间限制:1000 ms | 内存限制:65535 KB难度:3 描述新的宿舍楼有 N(1≤N≤100000) 层 and M(1≤M≤100000)个学生. 在新的宿舍楼里, 为了节约学生的时间也为了鼓励学生锻炼身体, 所以规定该宿舍楼里的电梯在相邻的两层之间是不会连续停下(即,如果在第2层停下就不能在第3层停下.).所以,如果有学生在相邻的两层之间要停下, 则其中的一部分学生必须选择走楼梯来代替.规定:一个人走下一层楼梯的花费为A,走上一层楼梯的花费为B.(1≤A,B≤100

NYOJ-1070诡异的电梯【Ⅰ】

这道题是个dp,主要考虑两种情况,刚开始我把状态转移方程写成了dp[i] = min(dp[i-1] + a, dp[i + 1] +b); 后来想想当推到dp[i]的时候,那个dp[i + 1]还没有推出来,所以这种方式推导出来不对,后来又看到dp[i] = min(dp[i-2]的所有情况最小值,dp[i-3]的所有情况值),其中dp[i]表示前 i 层的最小花费总和, dp[i-2]比较好理解,因为不能连着停,所以最近的那个就是dp[i - 2], dp[i - 3]意思就是停在dp[i

XTUOJ 1206 Dormitory&#39;s Elevator

Dormitory's Elevator Time Limit : 1000 MS   Memory Limit : 65536 KB Problem Description The new dormitory has N(1≤N≤100000) floors and M(1≤M≤100000)students. In the new dormitory, in order to save student's time as well as encourage student exercise,

AOJ 756.电梯

电梯 Time Limit: 1000 ms   Case Time Limit: 1000 ms   Memory Limit: 64 MBTotal Submission: 21   Submission Accepted: 13 Description 在城市的高层建筑物中,只有一部电梯,由N个正整数组成一个请求列表,列表中的数字表示电梯将在哪层停,电梯按列表顺序依次停靠.电梯每上行一层需要花6秒时间,每下行一层需要花4秒时间,电梯每停一次需要用时5秒.对于给定的请求列表,计算完成所有请求

电梯调度程序

说明: 此次是结对编程项目,其实还是第一次接触.之前都是自己一个人闷头写,想实现什么功能就写什么.但这次接触到结对编程,发现和别人讨论的重要性.两个人商量着来,分析用户需求,完善功能.而且两个人商量也不会像一个人找bug时那么的焦虑.着急.同时,也是最重要的,结对编程的方式对程序的质量也会有很大的提高. 一.题目要求: 现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示: 电梯编号 可服务楼层 最大乘客数量 最大载重量 1 全部楼层 10 800 kg 2 单层 10 80

结对项目——电梯调度之界面粗略规划与设计

在程序运行时要显示一个菜单界面,用于用户的一些操作.分为进入菜单,总控台菜单,以及退出. 在进入菜单里我们主要就是设计模拟电梯运动. 首先先分析下现实中的电梯: 1.在外界每一楼层都能够有选择上下的按钮(最低一层只有上,最高一层只有下) 2.选择方向与电梯的运行方向不同时,只有当电梯状态变成静止时才响应 3.电梯内部有能选择楼层的按钮 4.电梯有限载 设计初想: 1.进入菜单: 在每一层的上下按钮可以直接用button控件,显示的文字是:楼层+上/下:然后通过获取控件上的文本信息的第一个字符来确

电梯调度——调研报告

需求调研报告 立项背景: 石家庄铁道大学基础教学大楼是一座18层的建筑,其内部配备4部电梯,学生和老师使用电梯的高峰时段相对集中于每次上课/下课的时段,故电梯的使用具有突发性和荷载量大的特点,故设计合理的电梯调度算法,避免出现 “公共汽车”,即把电梯作为总线,它从底部到顶部,停在每一层楼,打开门,让人们进出,然后把门关上,继续前进.之后到达顶层,它会下去.可以极大的提高电梯的工作效率. 石家庄铁道大学基础教学楼的电梯配置如下: 电梯数量:4部 电梯的最大容量为15人 电梯经过每楼层的时间:3秒

结对开发--电梯调度报告

“电梯调度”需求分析 一.项目背景 试想一下,石家庄铁道大学基础教学楼的电梯配置如下:大厦有18层, 4部电梯,很多乘客使用这些电梯的日常(旅客重量:平均70公斤最大120公斤,最小45公斤).其他常量数据:电梯速度,开/关门时间,乘客的时间要在/走出电梯.可以对这些合理的假设. 二.数据分析 我们随机选择了一天去现场调查基础教学楼电梯的使用情况,列表如下: 电梯名称 停靠层数 乘客限制 重量限制/kg 电梯开关时间/s 乘客进出电梯时间/s 电梯1 8-18层(双层) 15人 1150 4s