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

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

题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4244

题意: 太长了自己看。

题解:
额……这个题初一的时候好像就在模拟赛里见过。(ckw巨佬当场切掉)
考虑dp: 设\(dp[i][j]\)表示考虑前\(i\)个位置,其中有\(j\)趟车开往\(i\)右边的位置(不包括\(i\))的最小代价。
胡乱转移即可。

……等等……这个题解是不是不太详细……
详细解释一下。
\(A[i]\) 从左边进入\(i\)的费用。
\(B[i]\) 从\(i\)到右边的费用。
\(C[i]\) 从右边进入\(i\)的费用。
\(D[i]\) 从\(i\)到左边的费用。
则从\(j\)到\(i\)的费用是\[w(i,j)=T(i-j)+B[j]+A[i] (j<i)\]\[w(i,j)=T(j-i)+D[j]+C[i](j>i)\]
然后我们拆一拆式子,以\(j<i\)为例:
\(w(i,j)=(Ti+A[i])+(-Tj+B[j])\)
然后我们发现一个了不起的性质——贡献的式子对于\(i,j\)是独立的,对于同一个\(i\)来说,\(j\)是多少对贡献并没有影响,有影响的只是\(j\)和\(i\)的大小关系!
于是我们设计出前面所述的状态
转移比较麻烦,我们先考虑一个简化版问题:如果每个点只能经过一次?
考虑枚举当前点的\(4\)种进出状态

  1. 左进左出,这样相当于一个原来到右边\(i\)的现在变成了左边,因此右边的数量\(-1\). 从\(dp[i-1][j+1]\)转移来
  2. 左进右出,从\(dp[i-1][j]\)转移来
  3. 右进左出,从\(dp[i-1][j]\)转移来
  4. 右进右出,从\(dp[i-1][j-1]\)转移来
    注意(3)(4)两种情况要特判\(j>0\)(想一想为什么)
    那如果可以经过多次?加一个类似于完全背包的转移,详见代码。

(继续瞎扯)我做这题的时候,写完了狂WA不止,然后上网搜题解,发现全是什么括号序列,蒙蔽了。
刚准备抄标程的时候,我发现标程除了方程完全不一样,还比我多个特判。
然后我把我的方程加了这个特判。切了……

好了,那么标程是怎么写的呢?
思路是,考虑把原序列转化成括号序列。
左进左出为右括号,右进右出为左括号,然后设了一个和我差不多的dp状态。
然而转移大不相同。因为这种计算方法是答案等于所有匹配的括号的距离之和,计算每一个位置对答案的贡献就是跨过该位置的括号对个数。
总结:用括号序列表示问题是一种不错的思路。

代码实现

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define llong long long
using namespace std;
const int N = 3000;
llong a[N+3];
llong b[N+3];
llong c[N+3];
llong d[N+3];
llong dp[N+3][N+3];
int n; llong t;
int main()
{scanf("%d%lld",&n,&t);for(int i=1; i<=n; i++) scanf("%lld%lld%lld%lld",&a[i],&b[i],&c[i],&d[i]);memset(dp,42,sizeof(dp));dp[0][0] = 0ll;for(int i=1; i<=n; i++){for(int j=0; j<=n; j++){if(j){dp[i][j] = min(dp[i][j],dp[i-1][j-1]+(-t*i+c[i])+(-t*i+b[i]));dp[i][j] = min(dp[i][j],dp[i-1][j]+(-t*i+c[i])+(t*i+d[i]));}dp[i][j] = min(dp[i][j],dp[i-1][j]+(t*i+a[i])+(-t*i+b[i]));dp[i][j] = min(dp[i][j],dp[i-1][j+1]+(t*i+d[i])+(t*i+a[i]));}for(int j=1; j<=n; j++) dp[i][j] = min(dp[i][j],dp[i][j-1]+(-t*i+c[i])+(-t*i+b[i]));for(int j=n-1; j>=0; j--) dp[i][j] = min(dp[i][j],dp[i][j+1]+(t*i+a[i])+(t*i+d[i]));}printf("%lld\n",dp[n][0]+t*(n+1ll));return 0;
}

转载于:https://www.cnblogs.com/suncongbo/p/10311265.html

BZOJ 4244 邮戳拉力赛 (DP)相关推荐

  1. [BZOJ 4244] 邮戳拉力赛

    BZOJ传送门 Description IOI铁路是由N+2N+2N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+10...N+10...N+1. 这条路线上行驶的电 ...

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

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

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

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

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

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

  5. BZOJ 4244 邮戳拉力赛

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

  6. bzoj4244: 邮戳拉力赛 dp

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

  7. 【BZOJ4244】邮戳拉力赛 DP

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

  8. BZOJ4244 邮戳拉力赛 dp

    题目链接 题意: 题解: cwbc讲课因为时间原因没讲到的一道题,结果正睿rxd的模拟赛 感觉还是很神仙的,我感觉我好像不太能想出来这个题啊. 一道神仙dp题.我们发现,最后答案一定需要从0到n+1, ...

  9. [BZOJ4244]邮戳拉力赛

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

最新文章

  1. 金智教育CTO:大数据人才培养要先行一步
  2. 算法笔记_098:蓝桥杯练习 算法提高 盾神与条状项链(Java)
  3. Visual Studio调试之符号文件
  4. 转载-centos网络配置(手动设置,自动获取)的2种方法
  5. 洗牌算法shuffle
  6. 华为交换机的一些OID
  7. Aspx页面javascript的几个trick
  8. 04年学计算机,2004年4月全国高等教育自学考试计算机网络与通信试题
  9. Material Design学习之 Dialog(顺便把前两天AppBarLayout没讲的部分提一提)
  10. 常用公差配合表图_车间里常用的机械测量工具竟然这么多?
  11. SAN(存储区域网络),WWN, WWPN,WWNN区别
  12. reviewboard 介绍
  13. 轻运维|无人干预,易捷行云新一代私有云一键式扩容
  14. Maven自动更新SNAPSHOT包
  15. 基于龙格-库塔法Runge-Kutta的常微分方程的求解matlab仿真
  16. linux点唱机安装教程,咪哒Minik移动ktv点唱机安装教程(文字版)
  17. python声音可视化_声音的可视化处理
  18. ​分享几个威胁情报平台
  19. 游戏开发高度图有关资料与Balder中的相关支持
  20. a4纸在html的像素,A4纸网页打印中对应像素的设定跟换算

热门文章

  1. WPF and Silverlight 学习笔记(十八):WPF样式(Style)与模板(Template)
  2. android 21点游戏代码,Android 21点
  3. python里面的之前打过的记忆信息-忘了Python关键语句?这份备忘录拯救你的记忆...
  4. 基于python的界面自动化测试-基于Python语言的自动化测试实战第二章(上)
  5. python读取txt文件并写入excel-Python读excel生成数据存入txt文件
  6. python计算机二级含金量-计算机二级 Python 怎么考?考什么?
  7. 小学生学python到底能干什么-小学生都学Python了,你还没用万矿?
  8. 函数式编程语言python-函数式编程语言
  9. 怎么在python下载网站内容-用Python下载一个网页保存为本地的HTML文件实例
  10. 用python画玫瑰花教程-利用Python的turtle库绘制玫瑰教程