BZOJ 4244 邮戳拉力赛 (DP)
手动博客搬家: 本文发表于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\)种进出状态
- 左进左出,这样相当于一个原来到右边\(i\)的现在变成了左边,因此右边的数量\(-1\). 从\(dp[i-1][j+1]\)转移来
- 左进右出,从\(dp[i-1][j]\)转移来
- 右进左出,从\(dp[i-1][j]\)转移来
- 右进右出,从\(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)相关推荐
- [BZOJ 4244] 邮戳拉力赛
BZOJ传送门 Description IOI铁路是由N+2N+2N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+10...N+10...N+1. 这条路线上行驶的电 ...
- [DP] BZOJ 4244 邮戳拉力赛
DP方程有点难懂 晕 #include<cstdio> #include<cstdlib> #include<cstring> #include<algori ...
- bzoj 4244: 邮戳拉力赛 动态规划
感觉自己dp这方面还需要加强啊. 显然一个合法的方案已定包含一条0-N+1的上行链(可以拼接得到),剩下的是一些环. 令dp[i][j]表示盖了前i个邮戳,并且从下行站走到上行站的次数-从上行站走到下 ...
- java越野拉力赛_BZOJ 4244 邮戳拉力赛 (DP)
为了防止我的博客被数学占领(一半以上的博文和数学相关),我决定添加几道非数学题的题解. 目前数学题比例: \(\frac{15}{32}=0.46875\) 扯淡结束 题意: 太长了自己看. 题解: ...
- BZOJ 4244 邮戳拉力赛
题意: 思路: 参考博客 https://blog.csdn.net/forever_shi/article/details/84931438 /*************************** ...
- bzoj4244: 邮戳拉力赛 dp
Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶 ...
- 【BZOJ4244】邮戳拉力赛 DP
[BZOJ4244]邮戳拉力赛 Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车 ...
- BZOJ4244 邮戳拉力赛 dp
题目链接 题意: 题解: cwbc讲课因为时间原因没讲到的一道题,结果正睿rxd的模拟赛 感觉还是很神仙的,我感觉我好像不太能想出来这个题啊. 一道神仙dp题.我们发现,最后答案一定需要从0到n+1, ...
- [BZOJ4244]邮戳拉力赛
Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶 ...
最新文章
- 金智教育CTO:大数据人才培养要先行一步
- 算法笔记_098:蓝桥杯练习 算法提高 盾神与条状项链(Java)
- Visual Studio调试之符号文件
- 转载-centos网络配置(手动设置,自动获取)的2种方法
- 洗牌算法shuffle
- 华为交换机的一些OID
- Aspx页面javascript的几个trick
- 04年学计算机,2004年4月全国高等教育自学考试计算机网络与通信试题
- Material Design学习之 Dialog(顺便把前两天AppBarLayout没讲的部分提一提)
- 常用公差配合表图_车间里常用的机械测量工具竟然这么多?
- SAN(存储区域网络),WWN, WWPN,WWNN区别
- reviewboard 介绍
- 轻运维|无人干预,易捷行云新一代私有云一键式扩容
- Maven自动更新SNAPSHOT包
- 基于龙格-库塔法Runge-Kutta的常微分方程的求解matlab仿真
- linux点唱机安装教程,咪哒Minik移动ktv点唱机安装教程(文字版)
- python声音可视化_声音的可视化处理
- ​分享几个威胁情报平台
- 游戏开发高度图有关资料与Balder中的相关支持
- a4纸在html的像素,A4纸网页打印中对应像素的设定跟换算
热门文章
- WPF and Silverlight 学习笔记(十八):WPF样式(Style)与模板(Template)
- android 21点游戏代码,Android 21点
- python里面的之前打过的记忆信息-忘了Python关键语句?这份备忘录拯救你的记忆...
- 基于python的界面自动化测试-基于Python语言的自动化测试实战第二章(上)
- python读取txt文件并写入excel-Python读excel生成数据存入txt文件
- python计算机二级含金量-计算机二级 Python 怎么考?考什么?
- 小学生学python到底能干什么-小学生都学Python了,你还没用万矿?
- 函数式编程语言python-函数式编程语言
- 怎么在python下载网站内容-用Python下载一个网页保存为本地的HTML文件实例
- 用python画玫瑰花教程-利用Python的turtle库绘制玫瑰教程