dp 洛谷P1977 出租车拼车 线性dp
题目背景
话说小 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”。
输入输出样例
2 2 10 5
1 1
2 2
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的更多相关文章
- 洛谷——P1977 出租车拼车
题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ...
- 洛谷—— P1977 出租车拼车
https://www.luogu.org/problem/show?pid=1977 题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总 ...
- P1977 出租车拼车(DP)
题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ...
- P1977 出租车拼车
P1977 出租车拼车 题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆 ...
- 【洛谷P1854】花店橱窗 线性dp+路径输出
题目大意:给定 N 个数字,编号分别从 1 - N,M 个位置,N 个数字按照相对大小顺序放在 M 个位置里,每个数放在每个位置上有一个对答案的贡献值,求一种摆放方式使得贡献值最大. 题解:一道典型的 ...
- 【题解】洛谷P1070 道路游戏(线性DP)
次元传送门:洛谷P1070 思路 一开始以为要用什么玄学优化 没想到O3就可以过了 我们只需要设f[i]为到时间i时的最多金币 需要倒着推回去 即当前值可以从某个点来 那么状态转移方程为: f[i]= ...
- 洛谷P1140 相似基因(线性DP)
题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了444种核苷酸,简记作A,C,G,TA,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类 ...
- 洛谷 P1280 尼克的任务 (线性DP)
题意概括 线性资源分配的问题,因为空闲的时间大小看后面的时间(反正感觉这个就是个套路)所以从后往前DP. 转移方程 如果当前时刻没有工作 f[i]=f[i+1]+1 如果当前时刻有工作 f[i]=ma ...
- 2018.07.09 洛谷P2365 任务安排(线性dp)
P2365 任务安排 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间 ...
随机推荐
- 人工智能第三课:数据科学中的Python
我用了两天左右的时间完成了这一门课<Introduction to Python for Data Science>的学习,之前对Python有一些基础,所以在语言层面还是比较顺利的,这门 ...
- 第三讲 smart qq 登录成功后获取 vfwebqq ,psessionid,hash
public static void Login_GetPHV() { string urldata = "{\"ptwebqq\":\"#{ptwebqq}\ ...
- python中的eval函数
eval() 函数十分强大 -- 将字符串 当成 有效的表达式 来求值 并 返回计算结果 In [1]: eval("1 + 3") Out[1]: 4 In [2]: eval( ...
- 设计模式之原型模式——Java语言描述
原型模式是用于创建重复对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的方式 这种模式实现了一个原型接口,该接口用于创建当前对象的克隆.当直接创建对象的代价比较大时,则适 ...
- 如何让gitbook与github仓库关联
一.账号注册 分别https://legacy.gitbook.com/login和https://github.com/注册账号. https://legacy.gitbook.com/login登 ...
- 抛弃console.log(),拥抱浏览器Debugger
译者按: 切换成本真的不高,建议使用开发者工具来Debug! 原文:How to stop using console.log() and start using your browser's deb ...
- 字符串拼接引发的BUG
译者按: bug虽小,却是个磨人的小妖精! 原文: Fixing a bug: when concatenated strings turn into numbers in JavaScript 译者 ...
- 2; HTML 基本结构
1. HTML 的基本结构 2. HTML 控制标记的格式 3. 最常用的控制标记 本章讲解最基本的 HTML 元素,也就是创建文档结构所需的元素.例如:标题.段落. 页面分隔.注释等等. 2.1 H ...
- ssh多台主机实现互相认证
一.主机情况 如下图所示,集群一共11台机器.编辑每台主机的hosts文件,添加如下内容,方便统一管理. 10.202.62.60 hadoop60 10.202.62.61 hadoop61 10. ...
- 23.Odoo产品分析 (三) – 人力资源板块(4) – 招聘流程(1)
查看Odoo产品分析系列--目录 安装招聘流程模块: 可以看到我们在前面的章节中设置的"生产经理"岗位,和其他的看板视图一样,每一个岗位板块提供了各种便捷的操作入口和颜色设置. ...