[无聊测试赛] T3 出租车拼车

又是一个典型的背包.注意贪心思路:如果你要做这辆车,你就坐满他.

\(i,j\)分别存坐上去的人总人数和现在的时间\(,dp[i][j]\) 统计来到这个状态的最小钱数

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN = 1e2+5;
int n,k,d,s;
int dp[MAXN<<1][MAXN],ans = 1e9;
inline void update(int a, int b){
  for (int i=n;i>=0;i--){//倒序背包
    for (int j=b;j>=0;j--){//时间也倒序
      dp[i+a][b] = min(dp[i+a][b],dp[i][j]+d+(n-i)*(b-j));
    }
  }
}
inline void find_ans(){
  for (int i=2*n-1;i>=n;i--){
    for (int j=s;j>=0;j--){
      ans = min(ans,dp[i][j]);
    }
  }//找最小满足所有人到达的时间
  if (ans==1e9) cout << "impossible";
  else cout << ans;
}
int main(){
  cin >> n >> k >> d >> s;
  memset(dp,0x3f3f,sizeof(dp));
  dp[0][0] = 0;
  for (int i=0;i<k;i++){
    int a,b; cin >> a >> b;
    update(b,a);
  }
  find_ans();
}

为啥要开2*n?因为有时候搭车人数会超过n.我们可以严格限制在n里但是我懒,于是就开大一点保证无错

原文地址:https://www.cnblogs.com/DannyXu/p/12536349.html

时间: 2024-11-07 18:21:47

[无聊测试赛] T3 出租车拼车的相关文章

无聊测试赛题解

无聊测试赛题解 首先膜拜_Zhumingrui大佬获得1000分的好成绩 T1 凯撒密码 T2 积木城堡 T3 出租车拼车 T4 汽车拉力比赛 T5 最佳课题选择 T6 排行榜 T7 豪华游轮 T8 佳佳的魔法药水 T9 矩阵覆盖 待填充 T10 所陀门王的宝藏 T11 老C的键盘 待填充 T12 道路 待填充 原文地址:https://www.cnblogs.com/DannyXu/p/12536283.html

P1977 出租车拼车

P1977 出租车拼车 题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有"拼车"一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱是一样的(每辆出租上除司机外最 多坐下 4 个人).刚好那天同校的一群 Oier 在校门口扎堆了,大家果断决定拼车 去赛场. 问题来了,一辆又一辆的出租车经过,但里面要么坐满了乘客,要么只剩下 一两个座位,众 Oier 都觉得坐上去太亏了,小 x 也是这么想的. 题

[无聊测试赛] T1 凯撒密码

本题的思路大致为首先解出每个字母所移动的格子数n,然后将所有的字母移动n个格子. n的解法: 第一行出现最多的字母和E的差就是n(题目后面的提示跳舞小人bfs证明可以理解为出现的频率) 具体实现为利用map存第一行每个字符出现的次数,然后移动全盘就行了 c++的好处在于他有内在的toupper(),tolower()和isalpha().在这题要注意答案全部需要转化为大写.我的解法是直接将输入转化为大写再统计 #include <cctype> #include <iostream>

[无聊测试赛] T4 汽车拉力比赛

这题有两个思路,第一个是并查集,第二是二分.我写的二分,复杂度 \(O(n^2logn)\) 可以过 二分的方法:二分高度差别.然后从某个点起点开始整个图.如果能够将所有起点覆盖,那么证明这个高度可以实现 遍历图可以用bfs实现.这题码量稍大,但思路清晰 #include <iostream> #include <algorithm> #include <queue> using namespace std; #define pp pair<int,int>

[无聊测试赛] T8 佳佳的魔法药水

思路比较新奇,但是想到了题目还是挺好做的 看到最小和次数可以想到最短路.看到数据范围可以想到必须在跑dij的时候记录次数.由于要记录的是最短路的方案,易证如果一种药有一种更便宜的配置方法,我们不会记录贵的那种. 于是,我们可以将这道题转化为一个用堆优化的dij.如果一种药水在堆顶,那么这种药水不可能有更便宜的配置方法 如果由A药水和B药水合成C药水比之前找到的配置方法便宜,那么C药水的配置方法数量为 A药水的配置方法 \(*\) B药水的配置方法. 如果由A药水和B药水合成C药水等于之前找到的配

[无聊测试赛] T7 豪华游轮

观察题目,发现可以贪心能往前走多少往前走多少,然后尽量扭180度后退.剩下角度可以通过原地扭屁股实现,并不会影响距离 开两个变量分别记录往前走和往后走的距离.角度只需一个数组,往左记为 \(\theta\) ,往右记为 \(360-\theta\) 度 怎么找最接近 \(180\) ?背包... 答案怎么找?假设我们从 \((0,0)\) 出发,如果找到终点的 \(x\) 和 \(y\) 就能用勾股定理求出距离.x的值为往前走的值 * 往后走的值 \(cos(\theta)\),y的值为往后走的

[无聊测试赛] T5 最佳课题选择

又是背包...(这题比黄还简单) 一维dp. \(i\) 表示现在拿了课题数, \(dp[i]\) 表示拿到n个课题的最小花费.将dp初始化大一点就行,记得开longlong #include <iostream> #include <algorithm> #include <math.h> #include <cstring> using namespace std; const long long MAXN = 2e2+5; long long n,m;

[无聊测试赛] T10 所驼门王的宝藏

码农题.思维难度中等,难在调试 建边方法:分别将x和y排序,对每个点,对它旁边所有的x/y连边(如果他需要). 开map记录点的位置,对于每个点,如果他的九宫格之内有其他点,就对他连边 注意排序会使点的顺序混乱,故需要在状态里将点的id保存 连完边跑tarjan缩点.易证如果你能到一个环内的某个点,你就可以到达这个环内的每个点.每个环的权值为他里面的点数量.将各个环转化为一个新图 可以发现新图已经转化为一个DAG.可以选择用dfs/topo来记录答案.这里我选择用dfs. dfs每个未经过的点并

拼车O2O市场再生变,谁将突围?

日前,百度领投51用车事件让拼车替代打车成为了人们关注出行的新焦点.打车难在中国的出租车市场一直都是一个困扰众多打车一族的难题,尽管这一难题在快的和滴滴的烧钱大战中暂时得到了缓解.不过随着滴滴和快的合并之后,烧钱补贴也就随之而去,出租车司机们高涨的热情又淡了下来,打车难的问题再次回升,使用滴滴和快的打车的用户热情也开始逐渐下降. 于是,很多打车软件和租车公司又推出了针对中高端消费人群的专车服务.但是对于大多数的普通打车一族来说,经常呼叫专车却是一种奢侈的消费,拼车无形之中就成为了打车一族们新的需