这道题是个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]向上走

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

 #include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int dp[];
int flo[];//保存各个楼层有多少人需要停
int main()
{
int kase = ;
int T;
scanf("%d", &T);
while (T--)
{
memset(dp, , sizeof(dp));
memset(flo, , sizeof(flo));
int n, m, a, b;
scanf("%d %d %d %d", &n, &m, &a, &b);
for (int i = ; i < m; i++)
{
int t;
scanf("%d", &t);
flo[t]++;
}
int minn;
for (int i = ; i <= n; i++)
{
//dp[i-2]中的情况,中间那一层向下或者向上,取最小
minn = min(flo[i - ] * a, flo[i - ] * b) + dp[i - ];
//dp[i-3]中情况,两个都向上走或者两个都向下走
int t1 = min(flo[i - ] * a + flo[i - ] * a, flo[i - ] * b + flo[i - ] * b);
//dp[i-3]中的情况,上面的向上走,下面的向下走和下面的向上走,上面的向下走
int t2 = min(flo[i - ] * b + flo[i - ] * a, flo[i - ] * a + flo[i - ] * b);
//取最小
int t3 = min(t1, t2) + dp[i - ];
dp[i] = min(minn, t3);
}
printf("Case %d: %d\n", ++kase, dp[n]);
} return ;
}

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

  1. NYIST 1070 诡异的电梯【Ⅰ】

    诡异的电梯[Ⅰ]时间限制:1000 ms | 内存限制:65535 KB难度:3 描述新的宿舍楼有 N(1≤N≤100000) 层 and M(1≤M≤100000)个学生. 在新的宿舍楼里, 为了节 ...

  2. NYOJ 诡异的电梯 && nyoj 1204 魔法少女

    诡异的电梯[Ⅰ] 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 新的宿舍楼有 N(1≤N≤100000) 层 and M(1≤M≤100000)个学生. 在新的宿舍楼里 ...

  3. XTUOJ 1206 Dormitory's Elevator

    Dormitory's Elevator Time Limit : 1000 MS   Memory Limit : 65536 KB Problem Description The new dorm ...

  4. 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]

    软件工程  ---   Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] 说明结对编程的优点和缺点. 结对编程的优点如下: 在独立设计.实现代码的过程中不 ...

  5. 你电梯没了—OO第二单元作业思考

    写在前面 这三次电梯调度作业,主要是学习多线程并行操作,对于各个线程的时间轴的把握,互相的配合与影响,通过使用锁来解决访问冲突等方面. 个人在学会Thread相关操作之外,写出来一些奇怪结构的诡异操作 ...

  6. NYOJ 1007

    在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...

  7. NYOJ 998

    这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...

  8. 你还可以再诡异点吗——SQL日志文件不断增长

    前言 今天算是遇到了一个罕见的案例. SQL日志文件不断增长的各种实例不用多说,园子里有很多牛人有过介绍,如果我再阐述这些陈谷子芝麻,想必已会被无数次吐槽. 但这次我碰到的问题确实比较诡异,其解决方式 ...

  9. Delphi编程时候诡异地出现ORA-00937错误,记录解决它的思路和方法

    首先需要说明,这个问题的出现需要几个前提:使用微软的Oracle驱动(使用Oracle自己的驱动不会出现这个问题).使用绑定变量法,使用Format等方式拼接SQL也不会出现这个问题,还有一些诡异的规 ...

随机推荐

  1. uva 11529 Strange Tax Calculation (几何+计数)

    题目链接: http://vjudge.net/problem/viewProblem.action?id=18277 这题暴力n^4妥妥的TLE!即使n^3也可能会T 正确的姿势应该是:枚举每个点作 ...

  2. 分片传输——send和recv函数

    最近在写socket编程收发数据,对于如何发送和接收大量数据,一直在思考.send和recv一般缓存区大小为4K,但是如果你要传输的数据超过了这个标准该如何做呢. 我想到的就是如改写write和rea ...

  3. ubantu-命令-进入超级用户

    sudo su; 建立文件夹 mkdir ulike_work;

  4. C# Word

    C# 操作word文档 1.c#操作word 在指定书签插入文字或者图片  1using Word = Microsoft.Office.Interop.Word; 2 3object Nothing ...

  5. [ JS 进阶 ] 如何改进代码性能 (3)

    原文链接 总结一下 1.减少操作dom的次数 2.需要多次使用某全局变量的时候,将其赋给一个局部变量,避免重复查找 3.优化循环 4.多用逗号和直接赋值的方式来var,减少工厂方式和构造函数方式创建对 ...

  6. javascript 字符串滚动显示

    <html> <head> <script type="text/javascript"> var chars = "JavaScri ...

  7. js 超级玛丽(未完成)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. DIV隐藏与重显

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. [Python笔记]第九篇:re正则表达式

    一.正则表达式基础 1.正则表达式介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分 ...

  10. Docker - 通过swarm 管理 docker service

    创建一个 Docker service $ docker service create --replicas 1 --name myhelloworld alpine ping docker.com ...