题目背景

话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去。大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱是一样的(每辆出租上除司机外最 多坐下 4 个人)。刚好那天同校的一群 Oier 在校门口扎堆了,大家果断决定拼车 去赛场。

问题来了,一辆又一辆的出租车经过,但里面要么坐满了乘客,要么只剩下 一两个座位,众 Oier 都觉得坐上去太亏了,小 x 也是这么想的。

题目描述

假设 N 位 Oier 准备拼车,此时为 0 时刻,从校门到目的地需要支付给出租

车师傅 D 元(按车次算,不管里面坐了多少 Oier),假如 S 分钟后恰能赶上比赛,

那么 S 分钟后经过校门口的出租车自然可以忽略不计了。现在给出在这 S 分钟当

中经过校门的所有的 K 辆出租车先后到达校门口的时间 T i 及里面剩余的座位 Zi

(1 <= Zi <= 4),Oier 可以选择上车几个人(不能超过),当然,也可以选择上 0 个

人,那就是不坐这辆车。

俗话说,时间就是金钱,这里小 x 把每个 Oier 在校门等待出租车的分钟数 等同于花了相同多的钱(例如小 x 等待了 20 分钟,那相当于他额外花了 20 元钱)。

在保证所有 Oier 都能在比赛开始前到达比赛地点的情况下,聪明的你能计 算出他们最少需要花多少元钱么?

输入输出格式

输入格式:

每组数据以四个整数 N , K , D , S 开始,具体含义参见题目描述。

接着 K 行,表示第 i 辆出租车在第 Ti 分钟到达校门,其空余的座位数为 Zi

(时间按照先后顺序)。

N <= 100,K <= 100,D <= 100,S <= 100,1 <= Zi <= 4,1<= T(i) <= T(i+1) <= S

输出格式:

对于每组测试数据,输出占一行,如果他们所有人能在比赛前到达比赛地点,

则输出一个整数,代表他们最少需要花的钱(单位:元),否则请输出“impossible”。

输入输出样例

输入样例#1: 复制

2 2 10 5
1 1
2 2
输出样例#1: 复制

14

这个是一个dp,对于dp数组的定义十分重要,开始我定义前,到第i分钟的时候还有j人没有上车,我觉得我定义的一塌糊涂,根本就不对,感觉没有用脑袋思考,后来看了题解之后
就知道最好定义成前i两个上了j个人花费的钱。
之前我自己的定义我觉得我是没有认真在写的,因为题目中给了两个很明确的量,一个是车辆一个是人数,所以最好用这个来定义,开始最好从正方向去定义,因为我们一般对于
正方向比较熟练。
在这个定义完之后,还有一个转移方程要写,这个转移方程要注意不能直接去转移所有可能上去人数的,因为两个车直接时间隔的太长了,然后又不能一次性全部上车,还不如之前可以上去,
就先上去了。
所以这个位置,转移要注意,可以有三层循环,最内层就是对于每次上车多少人进行转移。
然后还有就是每一个dp因为要对自己进行转移,所以就要给她赋初值。这个初值不能乱赋,而是赋值成如果不上这辆车的话,j个人所用的费用。
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 110;
int dp[maxn][maxn];
struct node
{
int t, z;
}exa[maxn];
int main()
{
int n, d, k, s;
cin >> n >> k >> d >> s;
for (int i = 1; i <= k; i++) scanf("%d%d", &exa[i].t, &exa[i].z);
for (int i = 1; i <= n; i++) dp[0][i] = inf;
dp[0][0] = 0;
for (int i = 1; i <= k; i++)
{
for (int j = 0; j <= n; j++)
{
dp[i][j] = dp[i-1][j];
for (int k = 1; k <= min(j, exa[i].z); k++)
{
dp[i][j] = min(dp[i - 1][j - k] + k * exa[i].t + d, dp[i][j]);
}
}
}
if (dp[k][n] >= inf) printf("impossible\n");
else printf("%d\n", dp[k][n]);
return 0;
}

  


dp 洛谷P1977 出租车拼车 线性dp的更多相关文章

  1. 洛谷——P1977 出租车拼车

    题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ...

  2. 洛谷—— P1977 出租车拼车

    https://www.luogu.org/problem/show?pid=1977 题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总 ...

  3. P1977 出租车拼车(DP)

    题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ...

  4. P1977 出租车拼车

    P1977 出租车拼车 题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆 ...

  5. 【洛谷P1854】花店橱窗 线性dp+路径输出

    题目大意:给定 N 个数字,编号分别从 1 - N,M 个位置,N 个数字按照相对大小顺序放在 M 个位置里,每个数放在每个位置上有一个对答案的贡献值,求一种摆放方式使得贡献值最大. 题解:一道典型的 ...

  6. 【题解】洛谷P1070 道路游戏(线性DP)

    次元传送门:洛谷P1070 思路 一开始以为要用什么玄学优化 没想到O3就可以过了 我们只需要设f[i]为到时间i时的最多金币 需要倒着推回去 即当前值可以从某个点来 那么状态转移方程为: f[i]= ...

  7. 洛谷P1140 相似基因(线性DP)

    题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了444种核苷酸,简记作A,C,G,TA,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类 ...

  8. 洛谷 P1280 尼克的任务 (线性DP)

    题意概括 线性资源分配的问题,因为空闲的时间大小看后面的时间(反正感觉这个就是个套路)所以从后往前DP. 转移方程 如果当前时刻没有工作 f[i]=f[i+1]+1 如果当前时刻有工作 f[i]=ma ...

  9. 2018.07.09 洛谷P2365 任务安排(线性dp)

    P2365 任务安排 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间 ...

随机推荐

  1. 1. 模拟Queue

    package com.gf.conn009; import java.util.LinkedList; import java.util.concurrent.atomic.AtomicIntege ...

  2. linux 中的单引号 和双引号有什么区别吗

    单引号与双引号的最大不同在于双引号仍然可以保有变量的内容,但单引号内仅能是一般字符 ,而不会有特殊符号.我们以底下的例子做说明:假设您定义了一个变量, name=VBird ,现在想以 name 这个 ...

  3. Android Studio 学习(三) 广播

    动态注册监听网络变化 创建intentFilter 并addAction 代表了监听哪个广播 然后使用registerReceiver()方法 将intentFilter 与 自己创建的监听器 传进去 ...

  4. qW3xT.2,解决挖矿病毒。

    网站在运行期间感觉怪怪的,响应速度慢的不是一丁半点,带宽5M,不该是这样的呀 于是登录Xshell top命令 查看cpu情况如下 PID为3435的进程占用CPU过大,难道被病毒入侵了吗? 查看该进 ...

  5. 从项目需求角度,使用纯CSS方案解决垂直居中

    CSS是HTML元素的剪刀手,它极度的丰富了web页面的修饰.在众多CSS常见的样式需求中,有一奇葩式的存在[垂直居中],因为不管是从逻辑实现方面还是从正常需求量来讲,这都没理由让这个需求在实践过程中 ...

  6. IDEA项目搭建十四——Web站点Controller基类及布局页静态资源设计

    一.简介 站点搭建完成后,编写页面时一般会有如下几个需求 1.嵌套静态页面时有很大一部分通用代码,如css.js这部分可以使用thymeleaf的局部片段代码块组成 2.这些静态资源默认放在程序中,但 ...

  7. Asp.Net MVC 利用ReflectedActionDescriptor判断Action返回类型

    System.Web.Mvc.ReflectedActionDescriptor descriptor = filterContext.ActionDescriptor as System.Web.M ...

  8. Python 标准类库-数据类型之copy-深拷贝浅拷贝操作

    标准类库-数据类型之copy-深拷贝浅拷贝操作   by:授客 QQ:1033553122 Python中赋值并不会拷贝对象,只是创建目标和对象的绑定关系. copy.copy(x) 返回x的浅拷贝 ...

  9. Windows上通过bat调用jmx进行循环运行

    1.jmx测试脚本中有两个线程组: 1)第一个线程组:模拟60台客户机并发像服务器发送上报请求,需要调用线程组的循环运行 2)第二个线程组:60台客户机上线后,模拟管理平台对客户机进行基础操作,如:创 ...

  10. (网页)sweetalert api 中文开发文档和手册,项目放弃alert

    弹框json的特别好使. sweetalert 示例 基本信息弹窗swal("这是一条信息!") 标题与文本的信息弹窗swal("这是一条信息!", " ...