为了防止我的博客被数学占领(一半以上的博文和数学相关),我决定添加几道非数学题的题解。

目前数学题比例: \(\frac{15}{32}=0.46875\)

扯淡结束

题意: 太长了自己看。

题解:

额……这个题初一的时候好像就在模拟赛里见过。(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

然后我们拆一拆式子,以\(j

\(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

#include

#include

#include

#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;

}

java越野拉力赛_BZOJ 4244 邮戳拉力赛 (DP)相关推荐

  1. [BZOJ 4244] 邮戳拉力赛

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

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

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

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

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

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

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

  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]邮戳拉力赛

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

  9. JOISC 2014 邮戳拉力赛(基础DP)

    题意 https://loj.ac/problem/2878 思路 真的神仙题,想到就很好写,想不到就写不出来. 肯定只能一个一个邮戳按顺序分析.首先,将取一枚邮戳的路径分为四种: 上行 \(\rig ...

最新文章

  1. python内置库之学习configparser库(一)
  2. 浅谈数据分析中的“暗物质”
  3. ux和ui_设计社交餐厅策展应用程序— UX / UI案例研究
  4. Oracle Buffer Cache的keep、recycle、default pool概念图解
  5. 字符串匹配BF/RK/BM/KMP算法
  6. 关于萤石云与海康威视摄像头对接
  7. TCP/IP常见英文缩写
  8. html表单中value的作用
  9. 计算机图形直线分析,计算机图形学 直线反走样Wu算法(4)
  10. 中科院读芯术python答案_Python调用中科院NLPIR(ICTCLAS2015)详解 刘超(lch614730@163.com)...
  11. 【转】蔡康永的说话之道
  12. vue在图片标注矩形框
  13. 自然语言处理(三):传统RNN(NvsN,Nvs1,1vsN,NvsM)pytorch代码解析
  14. java计算机毕业设计基于安卓Android的二手交易app-闲置物品交易app-ssm
  15. PFO(DMP end capped) cas:195456-48-5聚合物光电材料
  16. hpet 定时器中断 8259 linux,[OSDEV]编程高精度定时器(HPET)
  17. Java——判断回文
  18. 查看LINUX放开端口,linux如何查看端口是否开放?
  19. 计算机教室场地技术条,特殊教育学校功能室建设标准
  20. 全国计算机公共等级考试PETS,2016年下半年全国公共英语等级考试(PETS)和全国计算机等级考试(NCRE)考务工作视频会议顺利召开...

热门文章

  1. 在DirectX 12中绘制文字
  2. python生成图文并茂的pdf--财务报表(六)怎么生成并列表格
  3. 关于计算机应用基础论文,关于计算机应用基础论文范文.docx
  4. Hugging(transformers)读取自定义 checkpoint、使用 Trainer 进行测试回归任务
  5. 工作两年的小感悟~Larry成长记录
  6. bubble、冒泡排序
  7. DeleteDC 与 ReleaseDC的区别
  8. win7系统的计算机里没有扫描设备,Win7系统扫描仪添加方法
  9. 逼格最高的手机桌面来了!
  10. python购物车程序详解用字典_使用python操作文件实现购物车程序