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 - 2]的下一层的时候,这两种就是所有的情况了,其中dp[i-3]的时候情况稍多谢,主要中间隔了两层

dp[i - 3]时:

1. dp[i-2]和dp[i-1]层都向上或者都向下走

2. dp[i-2]向下走,dp[i-1]层 向上走

3.dp[i-2]向上走,dp[i-1]向上走

取他们当中最小的情况就是答案,代码如下:

 1
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 using namespace std;
 6 int dp[100005];
 7 int flo[100005];//保存各个楼层有多少人需要停
 8 int main()
 9 {
10     int kase = 0;
11     int T;
12     scanf("%d", &T);
13     while (T--)
14     {
15         memset(dp, 0, sizeof(dp));
16         memset(flo, 0, sizeof(flo));
17         int n, m, a, b;
18         scanf("%d %d %d %d", &n, &m, &a, &b);
19         for (int i = 0; i < m; i++)
20         {
21             int t;
22             scanf("%d", &t);
23             flo[t]++;
24         }
25         int minn;
26         for (int i = 3; i <= n; i++)
27         {
28             //dp[i-2]中的情况,中间那一层向下或者向上,取最小
29             minn = min(flo[i - 1] * a, flo[i - 1] * b) + dp[i - 2];
30             //dp[i-3]中情况,两个都向上走或者两个都向下走
31             int t1 = min(flo[i - 1] * a + flo[i - 2] * a, flo[i - 1] * b + flo[i - 2] * b);
32             //dp[i-3]中的情况,上面的向上走,下面的向下走和下面的向上走,上面的向下走
33             int t2 = min(flo[i - 1] * b + flo[i - 2] * a, flo[i - 1] * a + flo[i - 2] * b);
34             //取最小
35             int t3 = min(t1, t2) + dp[i - 3];
36             dp[i] = min(minn, t3);
37         }
38         printf("Case %d: %d\n", ++kase, dp[n]);
39     }
40
41     return 0;
42 }        
时间: 2024-10-12 07:35:29

NYOJ-1070诡异的电梯【Ⅰ】的相关文章

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 诡异的电梯

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

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,

C#实现四部电梯的调度

电梯调度 初次进行结对开发,一开始也不知道怎么设计规划我们的作业.也不知道怎么更好的配合去完成任务,通过几天的磨合,我们对结对开发有了更深刻的理解,作业进程也慢慢加快,感觉俩人配合对彼此的帮助都挺大的,下面我们就介绍一下我们这次作业的具体思路和大致分工和流程: 7月11号: 我们首先确定了这次作业用c#编写窗体应用程序来实现对四部电梯的调度.下午我俩去了图书馆借了关于c#的资料进行学习. 7月12号下午 通过上网查阅相关的资料和与同学们的交流,我们大体有了一个实现电梯调度的概念以及需要用到的相关

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秒