【问题描述】
山山很喜欢旅行,他坐飞机的次数也非常非常多,所以他成为了空中司机航空公司的会
员,并且有一张白金会员卡。
山山规划了接下来一段时间的行程,他需要坐飞机 n 次,现在空中司机给了他 m 种
优惠政策。
对于第 i 种政策,山山可以花费 ci 元办理一张“Ti 日通飞证”,这样他就可以 在某
个连续的 T i 天内坐飞机不花钱。对于每个政策,山山可以办理很多张这样的通飞证。山山
也可以每次直接购买机票,因为他是白金会员,他只需要花费 k 元就可购得一张机票。
由于山山还只是一名小学生,他的计算能力不是很强,于是他希望你能帮他算出完成行
程所需的最小花费。
【输入格式】
输入文件名为 travelling.in。
第一行为三个正整数 n m k。
第二行为 n 个正整数 a1 ~ an ,表示接下来的 n 次坐飞机分别在 a1 ~ an 天后。
保证这个数列递增且不重复。
接下来 m 行每行两个整数 Ti ci ,表示每种优惠政策中的 T 和 c 值。
【输出格式】
输出文件名为 travelling.out。
输出仅一行一个整数 ans 表示答案。
【样例输入与输出】
travelling.in 3 2 4
1 3 4
2 7
3 8
travelling.out
11
【数据范围与约定】
对于 20%的数据:0 < n <= 1000
对于 50%的数据:0 < n <= 10000
对于 100%的数据:0 < n <= 500000,0 <= m <= 20,0 < k, ci <= 1000,0 < ai<= 10 9 ,0 < ti <= 10 9

令 dp[i] 表示满足前 i 次行程的最小花费,那么第 i 天一定是直接买的机票或者为某个通飞
证有效期的最后一天,易得到一个 DP 方程:

dp[i]=max(dp[i-1]+k,dp[pre(i,j)]+c[j]
其中 pre(i, j) 表示“若第 i 天是第 j 种通飞证有效期的最后一天,之前的第一次不要买票
的行程的编号”。
pre 可以每次二分得到,这样每次转移的复杂度是 O(log n) ,会被卡成 50 分。

其实可以单调栈,因为a一直增加

所以d[j]表示第i-1次第j种优惠的pre值,要得到第i次则可以直接在i-1的基础上加

复杂度O(nm)

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 int a[500001],t[21],c[21],f[500001],d[500001];
 7 int n,m,k;
 8 int main()
 9 {
10     int i,j;
11     cin>>n>>m>>k;
12     for (i=1; i<=n; i++)
13     {
14         scanf("%d",&a[i]);
15     }
16     for (i=1; i<=m; i++)
17         scanf("%d%d",&t[i],&c[i]);
18     for (i=1; i<=n; i++)
19     {
20         f[i]=f[i-1]+k;
21         for (j=1; j<=m; j++)
22         {
23             int p=a[i]-t[j]+1;
24             while (a[d[j]]<p) d[j]++;
25             f[i]=min(f[i],f[max(d[j]-1,0)]+c[j]);
26         }
27     }
28     cout<<f[n];
29 }

转载于:https://www.cnblogs.com/Y-E-T-I/p/7681582.html

Travelling相关推荐

  1. PAT甲级1150 Travelling Salesman Problem:[C++题解]旅行商问题、图论

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 旅行商问题:访问每个城市并回到原城市的最短路. 思路: 1)判断相邻两点有无距离(NA):2)每个点是否都能到:3)是否是回路:4) ...

  2. JavaScript实现Travelling Salesman算法(附完整源码)

    JavaScript实现Travelling Salesman算法(附完整源码) bfTravellingSalesman.js完整源代码 bfTravellingSalesman.js完整源代码 f ...

  3. CF1009E Intercity Travelling

    CF1009E Intercity Travelling 题意: 有一段路程,路程可以看作是从0到n的一条直线 如果从起点出发或者从休息点出发,连续驾驶k千米,则需要消耗的体能为a1+-+ak 每个整 ...

  4. cf1504. Travelling Salesman Problem

    cf1504. Travelling Salesman Problem 题意: n个城市,编号1~n,每个城市有美丽值a[i],现在要从城市1出发,其他所有城市走一遍,最后回到城市1,城市i到j的花费 ...

  5. PAT 1150 Travelling Salesman Problem(25 分)- 甲级

    The "travelling salesman problem" asks the following question: "Given a list of citie ...

  6. bzoj 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛(BFS)

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1293  Solved ...

  7. BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛【DP】

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec Memory Limit: 64 MB Description 奶牛们在被划分成N ...

  8. BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 bfs

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1290  Solved ...

  9. 【bzoj 1616】: [Usaco2008 Mar]Cow Travelling游荡的奶牛 dp

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1616 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Tim ...

  10. bzoj1616[Usaco2008 Mar]Cow Travelling游荡的奶牛*

    bzoj1616[Usaco2008 Mar]Cow Travelling游荡的奶牛 题意: n行m列的草地上有一些位置有障碍物.第0时刻奶牛在(r1,c1),第t时刻奶牛在(r2,c2)(注意这里都 ...

最新文章

  1. (转载)微信公众平台开发入门教程
  2. 配置syslog发送_nginx简单配置优化概述
  3. 20天吃透 PyTorch 中文版(附下载)
  4. Http / Get 和 Post 区别
  5. 大数高精运算-----乘法
  6. 210120 阶段三 fork与阻塞函数
  7. Cobaltstrike4.0系列教程(一)----简介与安装
  8. web通讯录之搜索功能
  9. 最高76%破解成功率!GAN已经能造出“万能指纹”,你的手机还安全吗?
  10. Linux基础命令---accept打印机控制
  11. mysql中set names_深入理解mysql SET NAMES和mysql(i)_set_charset的区别
  12. 关于今天zcash4win钱包出错的解决方案Error in updating status 怎么解决
  13. 学习备忘英语单词转载
  14. 华东交通大学计算机考研资料汇总
  15. eclipse建java gui工程,Eclipse java swing开发环境搭建教程
  16. 生活随记 - 尝试与师傅沟通争取自己的权益
  17. 软件工程个人项目— 数独
  18. unity 模拟抛物线 1
  19. NameNode故障处理方法
  20. 学习PMP,你最看重培训机构哪些点?

热门文章

  1. 软测百科之 日常测试工作中哪些是必须知道的 SQL 语句?
  2. 转行python有前途吗_Python发展有前途吗?
  3. 从招聘数据看GIS就业
  4. centos7使用命令行查看开机启动项和服务启动状态
  5. 计算机网络 —— 计算机网络概述
  6. CUDA性能优化系列——Kmeans算法调优(二)
  7. 使用redis模拟商品秒杀
  8. EasyExcel实现Excel文件导入导出
  9. 【模板题】贪心-排序不等式
  10. matlab 离散阶跃函数,MATLAB编程实现简单阶跃函数波形