JOISC 2014 邮戳拉力赛(基础DP)
题意
思路
真的神仙题,想到就很好写,想不到就写不出来。
肯定只能一个一个邮戳按顺序分析。首先,将取一枚邮戳的路径分为四种:
- 上行 \(\rightarrow\) 邮戳台 \(\rightarrow\) 上行 简称路径 \((U,V)\)
- 上行 \(\rightarrow\) 邮戳台 \(\rightarrow\) 下行 简称路径 \((U,E)\)
- 下行 \(\rightarrow\) 邮戳台 \(\rightarrow\) 下行 简称路径 \((D,E)\)
- 下行 \(\rightarrow\) 邮戳台 \(\rightarrow\) 上行 简称路径 \((D,V)\)
取一枚邮戳也就这四种路径。
但我们发现,路径 \((D,V)\) 的出现前提是有路径 \((U,E)\) 在前面出现过,也就是说到任意一个点路径 \((U,E)\) 的条数总是多余路径 \((D,V)\) 。也是说,我们可以将 \((U,E)\) 的条数减 \((D,V)\) 的条数当 \(\text{dp}\) 的第二维,也就是还未抵消的 \((U,E)\) 路径。另外 \((D,V)\) 路径出现的条件为至少有一个还未抵消的 \((U,E)\) 路径。
那么转移就是上述的四种,一个 \(O(n^3)\) 的暴力很快就能出来了
chk_min(dp[i][j],dp[i-1][j]+u+v);
if(j>0)chk_min(dp[i][j],dp[i-1][j]+d+e);
FOR(k,1,j)chk_min(dp[i][j],dp[i-1][j-k]+(d+v)*k);
FOR(k,1,n-j)chk_min(dp[i][j],dp[i-1][j+k]+(u+e)*k);
dp[i][j]+=(ll)T*(2*j+1); //计算j个(D,V)路径的贡献
不难发现后面两维可以直接前后缀优化,或者背包转移,复杂度就优化至 \(O(n^2)\) 了。
代码
#include<bits/stdc++.h>
#define FOR(i,x,y) for(int i=(x),i##END=(y);i<=i##END;++i)
#define DOR(i,x,y) for(int i=(x),i##END=(y);i>=i##END;--i)
using namespace std;
template<typename T,typename _T>inline bool chk_min(T &x,const _T y){return y<x?x=y,1:0;}
template<typename T,typename _T>inline bool chk_max(T &x,const _T y){return x<y?x=y,1:0;}
typedef long long ll;
const int N=3005;
ll dp[N][N],f[N],g[N];
int n,T;
int main()
{
scanf("%d%d",&n,&T);
memset(dp,0x3f,sizeof(dp));
dp[0][0]=0;
FOR(i,1,n)
{
int u,v,d,e;
scanf("%d%d%d%d",&u,&v,&d,&e);
FOR(j,0,n)f[j]=g[j]=dp[i-1][j];
FOR(j,1,n)chk_min(f[j],f[j-1]+(d+v));
DOR(j,n-1,0)chk_min(g[j],g[j+1]+(u+e));
FOR(j,0,n)
{
chk_min(dp[i][j],dp[i-1][j]+u+v);
if(j>0)chk_min(dp[i][j],dp[i-1][j]+d+e);
// FOR(k,1,j)chk_min(dp[i][j],dp[i-1][j-k]+(d+v)*k);
// FOR(k,1,n-j)chk_min(dp[i][j],dp[i-1][j+k]+(u+e)*k);
if(j>0)chk_min(dp[i][j],f[j-1]+(d+v));
if(j<n)chk_min(dp[i][j],g[j+1]+(u+e));
dp[i][j]+=(ll)T*(2*j);
}
}
printf("%lld\n",dp[n][0]+(n+1)*T);
return 0;
}
JOISC 2014 邮戳拉力赛(基础DP)的更多相关文章
- 【bzoj4244】邮戳拉力赛 背包dp
题目描述 IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶,下行电车沿编 ...
- 【BZOJ4244】邮戳拉力赛 DP
[BZOJ4244]邮戳拉力赛 Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车 ...
- 基础dp
队友的建议,让我去学一学kuangbin的基础dp,在这里小小的整理总结一下吧. 首先我感觉自己还远远不够称为一个dp选手,一是这些题目还远不够,二是定义状态的经验不足.不过这些题目让我在一定程度上加 ...
- 基础DP(初级版)
本文主要内容为基础DP,内容来源为<算法导论>,总结不易,转载请注明出处. 后续会更新出kuanbin关于基础DP的题目...... 动态规划: 动态规划用于子问题重叠的情况,即不同的子问 ...
- [BZOJ4244]邮戳拉力赛
Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶 ...
- hdu 5586 Sum 基础dp
Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Desc ...
- hdu 4055 Number String (基础dp)
Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)
layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...
- 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP)
layout: post title: 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP) author: "luowentaoaa" catalog: true ...
随机推荐
- Python 学习记录之----模块 paramiko
paramiko 一.安装 pip3.5 install paramiko pip3.5 install pycrypto # pycrypto,由于 paramiko 模块内部依赖pycrypto, ...
- 1、第一个android APP
https://blog.csdn.net/tongyong128/article/details/68484726
- SQL数据库增量备份还原方式
SQLSERVER2008的备份还原最基本的方式自然是完整备份,然后完整还原即可. 但是如果遇到数据库文件很大,数据量很大,备份和还原需要花费不少时间的时候, 数据库的差异备份自然就成为考虑的备份方案 ...
- kali linux常用软件配置记录
首先膜一波,认真细致,简明有效. 感谢原博主的分享,留作参考. https://www.cnblogs.com/youfang/p/5272746.html
- MyEclipse中项目运行时发生了Tomcat报错:[java.lang.OutOfMemoryError: PermGen space]
Tomcat内存溢出,异常信息如下: 十一月 26, 2017 1:52:26 下午 org.apache.catalina.core.ContainerBase$ContainerBackgroun ...
- 线程池demo
package test; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callabl ...
- Linux环境jdk的安装
1.下载jdk1.7,oracle的下载地址已经失效,找了个其他的地址进行下载. wget http://pc.xzstatic.com/2017/03/jdk7u79linuxx64.tar.gz ...
- sping的quartz设置定时任务
除了spring相关的jar包之外,还需要引入quartz-all-1.8.6.jar 下载地址:http://www.quartz-scheduler.org/downloads/ spring配置 ...
- 【题解】Luogu P3740 [HAOI2014]贴海报
woc,今天已经是day -1了 再写一颗珂朵莉树来++rp吧 否则就要AFO了qaq 这有可能是我最后一篇题解/博客qaq 原题传送门:P3740 [HAOI2014]贴海报 考前刷水题到底是对还是 ...
- Python 使用 face_recognition 人脸识别
Python 使用 face_recognition 人脸识别 官方说明:https://face-recognition.readthedocs.io/en/latest/readme.html 人 ...