BZOJ传送门

Description

IOI铁路是由N+2N+2N+2个站点构成的直线线路。这条线路的车站从某一端的车站开始顺次标号为0...N+10...N+10...N+1。

这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶,下行电车沿编号减小方向行驶。乘坐这两种电车的话,移动1站的距离需要TTT秒。换句话说,乘坐上行电车从车站i走到车站i+1i+1i+1需要TTT秒,称作下行电车从车站iii走到车站i−1i-1i−1也需要TTT秒。你不能在000号车站乘坐下行电车,或在N+1N+1N+1号车站乘坐上行电车。由于电车发车的频率非常高,你可以无视等待电车消耗的时间。

每个车站设有上行电车的站台和下行电车的站台,连接两个站台的道路上设有邮戳台。

现在,IOI铁路召开了邮戳拉力赛。在拉力赛中,选手需要从000号车站的上行电车站台出发,在1...N1...N1...N号车站各盖一枚邮戳,最终到达N+1N+1N+1号车站的上行电车站台即可完成。

为了在每个车站盖上邮戳,必须从电车上下来,步行走到车站通路上的邮戳台。在iii号车站的上行电车站台、邮戳台、下行电车站台之间移动所消耗的时间如下所示:

从车站iii的上行电车站台到邮戳台的时间为UiU_iUi​秒

从车站iii的邮戳台到上行电车站台的时间为ViV_iVi​秒

从车站iii的下行电车站台到邮戳台的时间为DiD_iDi​秒

从车站iii的邮戳台到下行电车站台的时间为EiE_iEi​秒

邮戳拉力赛的选手只能访问000号车站与N+1N+1N+1号车站各一次。1...N1...N1...N号车站都可以访问任意多次。

现在给出有邮戳台的车站个数、乘坐电车移动一站的时间、在每个车站的上行电车站台、邮戳台、下行电车站台之间移动所消耗的时间,请你求出完成邮戳拉力赛的最短时间。

这个时间包括从000号车站出发,按下NNN个邮戳后到达N+1N+1N+1号车站的时间。无视等车的时间和按邮戳的时间。

Input

第一行两个空格分隔的整数NNN和TTT,表示有N+2N+2N+2个车站,电车行驶一站的距离需要TTT秒

接下来NNN行,第iii行有四个空格分隔的整数Ui,Vi,Di,EiU_i,V_i,D_i,E_iUi​,Vi​,Di​,Ei​,分别表示:

从车站iii的上行电车站台到邮戳台的时间为UiU_iUi​秒

从车站iii的邮戳台到上行电车站台的时间为ViV_iVi​秒

从车站iii的下行电车站台到邮戳台的时间为DiD_iDi​秒

从车站iii的邮戳台到下行电车站台的时间为EiE_iEi​秒

Output

输出一行一个整数,表示完成邮戳拉力赛的最短时间。

Sample Input

4 1
1 1 1 1
1 9 9 1
9 9 1 1
1 9 9 1

Sample Output

23

HINT

从车站000出发,按照2−1−4−3−1−52-1-4-3-1-52−1−4−3−1−5的顺序访问车站可以达到最短时间。

1≤N≤30001\le N\le 30001≤N≤3000

1≤T≤1051\le T\le 10^51≤T≤105

1≤Ui≤105(1≤i≤N)1\le Ui\le 10^5(1\le i\le N)1≤Ui≤105(1≤i≤N)

1≤Vi≤105(1≤i≤N)1\le Vi\le 10^5(1\le i\le N)1≤Vi≤105(1≤i≤N)

1≤Di≤105(1≤i≤N)1\le Di\le 10^5(1\le i\le N)1≤Di≤105(1≤i≤N)

1≤Ei≤105(1≤i≤N)1\le Ei\le 10^5(1\le i\le N)1≤Ei≤105(1≤i≤N)

解题分析

DPDPDP神题, 自己并不会搞出这个状态。

因为如果我们从上行线转到了下行线, 一定是要从前面的一个位置再回到上行线。 那么实际上整个图是由很多环构成的。

设dp[i][j]dp[i][j]dp[i][j]表示处理到第iii个位置, 从下行到上行的路径经过次数比上行到下行的路径经过次数多jjj次(也就是我们还需要向下走jjj次。 那么就可以科学转移了。

注意如果要从下面得到邮戳, jjj需要>0>0>0, 即我们还有从下面经过这个点的可能。

代码如下:

#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <algorithm>
#include <cstring>
#define R register
#define IN inline
#define W while
#define gc getchar()
#define MX 3005
#define ll long long
template <class T>
IN void in(T &x)
{x = 0; R char c = gc;for (; !isdigit(c); c = gc);for (;  isdigit(c); c = gc)x = (x << 1) + (x << 3) + c - 48;
}
template <class T> IN T min(T a, T b) {return a < b ? a : b;}
ll dp[MX][MX];
int n, T;
int main(void)
{int u, v, d, e;in(n), in(T);std::memset(dp, 63, sizeof(dp));dp[0][0] = 0;R int i, j;for (i = 1; i <= n; ++i){in(u), in(v), in(d), in(e);for (j = 1; j <= n; ++j) dp[i - 1][j] += j * T * 2;for (j = 1; j <= n; ++j) dp[i][j] = min(dp[i][j], dp[i - 1][j - 1] + d + v);for (j = 0; j <  n; ++j) dp[i][j] = min(dp[i][j], dp[i - 1][j + 1] + u + e);for (j = 0; j <= n; ++j) dp[i][j] = min(dp[i][j], dp[i - 1][j] + u + v);for (j = 1; j <= n; ++j) dp[i][j] = min(dp[i][j], dp[i - 1][j] + e + d);for (j = 1; j <= n; ++j) dp[i][j] = min(dp[i][j], dp[i][j - 1] + d + v);for (j = i - 1; ~j; --j) dp[i][j] = min(dp[i][j], dp[i][j + 1] + u + e);}printf("%lld", dp[n][0] + 1ll * (n + 1) * T);
}

[BZOJ 4244] 邮戳拉力赛相关推荐

  1. BZOJ 4244 邮戳拉力赛 (DP)

    手动博客搬家: 本文发表于20181211 18:01:21, 原地址https://blog.csdn.net/suncongbo/article/details/84957907 为了防止我的博客 ...

  2. bzoj 4244: 邮戳拉力赛 动态规划

    感觉自己dp这方面还需要加强啊. 显然一个合法的方案已定包含一条0-N+1的上行链(可以拼接得到),剩下的是一些环. 令dp[i][j]表示盖了前i个邮戳,并且从下行站走到上行站的次数-从上行站走到下 ...

  3. [DP] BZOJ 4244 邮戳拉力赛

    DP方程有点难懂 晕 #include<cstdio> #include<cstdlib> #include<cstring> #include<algori ...

  4. BZOJ 4244 邮戳拉力赛

    题意: 思路: 参考博客 https://blog.csdn.net/forever_shi/article/details/84931438 /*************************** ...

  5. java越野拉力赛_BZOJ 4244 邮戳拉力赛 (DP)

    为了防止我的博客被数学占领(一半以上的博文和数学相关),我决定添加几道非数学题的题解. 目前数学题比例: \(\frac{15}{32}=0.46875\) 扯淡结束 题意: 太长了自己看. 题解: ...

  6. bzoj4244: 邮戳拉力赛 dp

    Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶 ...

  7. [BZOJ4244]邮戳拉力赛

    Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶 ...

  8. 【BZOJ4244】邮戳拉力赛 DP

    [BZOJ4244]邮戳拉力赛 Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车 ...

  9. bzoj4244 loj2878. 「JOISC 2014 Day2」邮戳拉力赛 括号序列+背包

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4244 https://loj.ac/problem/2878 题解 挺妙的一道题. 一开始一直 ...

最新文章

  1. J2EE的13种核心技术规范
  2. 3d旋转相册代码源码_如何使用CSS开发精美3D旋转相册?
  3. android sql 顺序执行问题,怎么才能执行第一个完毕,才能继续执行第二个
  4. 技术开源出现“逆趋势”,中国如何下好 AI Open 这盘棋
  5. 新年福利 | “社区之星”(社区核心贡献者)成长故事征集
  6. oracle em 乱码问题
  7. 【CyberSecurityLearning 42】日志记录规则
  8. java制作安卓客户端_制作网页的Android客户端(一)
  9. linux查询设备文件信息失败怎么办,Linux下使用blkid命令查询设备及文件系统信息的方法...
  10. 计算机中整数加法满足结合律吗
  11. ConcurrentHashMap笔记
  12. linux命令怎么查看文件时间排序,linux中ls命令按照文件大小排...-ls命令按大小与时间排序文件...-ls按时间排序输出文件列表的实例分析_169IT.COM...
  13. 学习笔记--asp.net主题和外观(转自msdn,仅为自己学习存储和有意读者使用)
  14. Java进阶:SpringMVC数据请求全局过滤器
  15. 启动Delphi2010就出现‘displayNotification: 堆栈溢出’
  16. Nginx的keeplive
  17. 机器学习之决策树、随机森林
  18. appstore ip地址
  19. 2021我的前端开发年度总结
  20. 微信小程序服务器云端,微信小程序云端解决方案.PDF

热门文章

  1. 科普书籍有哪些,推荐你读这8本
  2. 深度学习中的潜在空间
  3. python的数据库中间件_sparrow
  4. muti_LIDAR_calibration解析
  5. 产品健康度模型(3) 指标关联性分析
  6. Tableau 消费客户分析(二)分群规模和消费
  7. Browser-sync安装与使用
  8. 使用计算机上的配置文件,电脑如何设置文件夹的密码
  9. 极光id 唯一性问题
  10. 大数据分析就业班课程大纲