JOISC 2014 邮戳拉力赛(基础DP)
题意
https://loj.ac/problem/2878
思路
真的神仙题,想到就很好写,想不到就写不出来。
肯定只能一个一个邮戳按顺序分析。首先,将取一枚邮戳的路径分为四种:
- 上行 \(\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;
}
转载于:https://www.cnblogs.com/Paulliant/p/10256813.html
JOISC 2014 邮戳拉力赛(基础DP)相关推荐
- bzoj4244: 邮戳拉力赛 dp
Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶 ...
- 【BZOJ4244】邮戳拉力赛 DP
[BZOJ4244]邮戳拉力赛 Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车 ...
- [BZOJ 4244] 邮戳拉力赛
BZOJ传送门 Description IOI铁路是由N+2N+2N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+10...N+10...N+1. 这条路线上行驶的电 ...
- [BZOJ4244]邮戳拉力赛
Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶 ...
- 2014计算机基础知识,2014年计算机基础知识练习题240_甘肃中公教育
2014年计算机基础知识练习题240_甘肃中公教育 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 3. 运算精度高电子计算机具有以往计 ...
- kuangbin专题十二 基础DP
kuangbin专题十二 基础DP A - HDU1024 Max Sum Plus Plus B - HDU1029 Ignatius and the Princess IV C - HDU1069 ...
- 软件设计师2014上午题基础知识(易错整理)
软件设计师2014上午题基础知识(易错整理) 2014 上半年 木马程序的客户端运行在攻击者的机器上 海明码检验位计算:有效信息位 + 校验位个数 <= 2^校验位个数 - 1 防火墙工作层次越 ...
- poj3666(基础dp+离散化)
题目链接:http://poj.org/problem?id=3666 Making the Grade Time Limit: 1000MS Memory Limit: 65536K Total ...
- 2014计算机基础知识试题,2014年计算机基础知识试题及答案大全—版.pdf
2014 年计算机基础知识试题及答案 第一部分 一.单项选择题 1.世界上第一台电子数字计算机取名为 ( ). A.UNIV AC B.EDSAC C.ENIAC D.EDVAC 2.操作系统的作用是 ...
最新文章
- spring mvc + mybatis 框架搭建 ( idea + gradle)
- exchange online share mailbox senditem
- 验证Linux主机是否支持RDMA
- linux查看nginx运行状态,如何查看nginx运行状态及相关属性说明
- 编写自适应高度的 textarea
- python可以开发exe软件吗_python能开发exe软件吗
- 苹果WWDC前瞻之iOS 13更新最受关注;微软发布基于区块链的去中心化身份识别系统;小米成立了新集团质量办公室……...
- 图论模型迪杰斯特拉算法
- maven中ssm框架快速搭建
- linux vcenter6.5下载,vCenter 6.0更新至6.5
- SSH远程连接:简单的连接
- 为什么PHP能够受到大家追捧和喜爱,又为什么饱受嘲讽?
- 卷积神经网络(CNN)相关的基础知识
- [原创]如何从数据库层面检测两表内容的一致性
- 视频号的商业想象空间,在前天更新后,会在以下3个方面
- IP数据报格式,IP分片,IP编址,子网掩码
- 标准3层神经网络搭建Demo
- Java进阶:SpringMVC中使用fileupload报错Error creating bean with name ‘multipartResolver‘
- BOBSLEDDING(一道有趣的贪心题 nyoj309)
- 项目文档说明前端部分怎么写?写进readme.md文件里面。
热门文章
- JSP连接数据库教程(IDEA)
- linux moxa 多串口卡_MOXA - PCI Express多串口卡解决方案
- 基于用户行为的交易反欺诈探索
- 两台笔记本低延时屏幕扩展(双联屏)
- 点击展开按钮设计_使您的按钮设计可点击
- 全国离线地图矢量数据
- flutter中Future.delayed延迟任务
- 哈希表之bkdrhash算法解析及扩展
- 论文研读 —— 4. You Only Look Once Unified, Real-Time Object Detection (2/3)
- Solidity 智能合约入门