【[ZJOI2006]物流运输】
一直不会做,觉得这是一道神题
于是万般无奈下去借鉴抄了一下题解
发现这就是一道套路题
我们用\(dp[i]\)表示前\(i\)天的最小总花费,于是我们就可以用一个常规的老套路来做了
那就是枚举断点
我们如果可以预处理出一个数组\(dis[i][j]\)表示在第\(i\)天到第\(j\)天的最短路的话,方程是不是就很好写了
\(dp[i]=min(dp[j]+k+dis[j+1][i]*(i-j))\)
但是我们这个数组怎么预处理呢
瞎跑最短路就可以了
反正数据范围这么小,基本什么算法都能过去了,对于\(dijkstra\),把那些不能走的点标记成已经找到了最短路,让这些点没有办法去做松弛操作就好了
这种断点类dp的题还是不少的,比如说经典的山区建小学,在比如说那道统计单词个数都是比较套路的枚举断点类dp,这种dp的复杂度一般来说是\(O(n^2)\)的,枚举断点的时候也非常无脑,所以对于这种dp,应该尽量保证见到就能A掉
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<bitset>
#define mp make_pair
#define re register
#define maxn 101
#define inf 999999999
#define LL long long
using namespace std;
struct GG
{
int v,nxt,w;
}e[10001];
LL n,m,k,E,Q,num;
typedef pair<LL,int> pii;
priority_queue<pii,vector<pii>,greater<pii> > q;
LL d[maxn],head[maxn];
bitset<maxn> f;
LL dp[101];
int a[101][101],tot[101];
LL dis[101][101];
inline LL read()
{
char c=getchar();
LL x=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x;
}
inline void add_edge(int x,int y,int z)
{
e[++num].v=y;
e[num].nxt=head[x];
e[num].w=z;
head[x]=num;
}
inline LL dijkstra(int beg,int enn)
{
for(re int i=1;i<=m;i++)
d[i]=inf,f[i]=0;
for(re int i=beg;i<=enn;i++)
{
for(re int j=1;j<=tot[i];j++)
f[a[i][j]]=1;
}
d[1]=0;
q.push(mp(0,1));
while(!q.empty())
{
int k=q.top().second;
q.pop();
if(f[k]) continue;
f[k]=1;
for(re int i=head[k];i;i=e[i].nxt)
if(d[e[i].v]>d[k]+e[i].w)
{
d[e[i].v]=d[k]+e[i].w;
q.push(mp(d[e[i].v],e[i].v));
}
}
return d[m];
}
int main()
{
n=read();
m=read();
k=read();
E=read();
LL x,y,z;
for(re int i=1;i<=E;i++)
{
x=read();
y=read();
z=read();
add_edge(x,y,z);
add_edge(y,x,z);
}
Q=read();
while(Q--)
{
z=read();
x=read();
y=read();
for(re int i=x;i<=y;i++)
a[i][++tot[i]]=z;
}
for(re int i=1;i<=n;i++)
for(re int j=i;j<=n;j++)
dis[i][j]=dijkstra(i,j);
for(re int i=1;i<=n;i++)
{
dp[i]=i*dis[1][i];
for(re int j=1;j<i;j++)
dp[i]=min(dp[i],dp[j]+dis[j+1][i]*(i-j)+k);
}
cout<<dp[n]<<endl;
return 0;
}
【[ZJOI2006]物流运输】的更多相关文章
- [ZJOI2006]物流运输
1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5999 Solved: 2473[Submit][Stat ...
- bzoj1003 [ZJOI2006]物流运输
1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6300 Solved: 2597[Submit][Stat ...
- 【bzoj1003】[ZJOI2006]物流运输
1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6331 Solved: 2610[Submit][Stat ...
- bzoj1003: [ZJOI2006]物流运输
dp+最短路.暴力枚举就可以了.O(n3logn).样例中m=n然后测样例过了.然后 54行习惯性的dis[n]然后就WA了!!!. #include<cstdio> #include&l ...
- BZOJP1003 [ZJOI2006]物流运输trans
BZOJP1003 [ZJOI2006]物流运输trans 1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec Memory Limit: 162 MB Sub ...
- BZOJ 1003 [ZJOI2006]物流运输trans
1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4242 Solved: 1765[Submit] ...
- bzoj1003[ZJOI2006]物流运输trans
1003: [ZJOI2006]物流运输trans Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常 ...
- BZOJ 1003: [ZJOI2006]物流运输trans(最短路+dp)
1A,爽! cost[i][j]表示从第i天到第j天不改路线所需的最小花费,这个可以用最短路预处理出.然后dp(i)=cost[j][i]+dp(j-1)+c. c为该路线的花费. --------- ...
- BZOJ_1003_[ZJOI2006]物流运输_最短路+dp
BZOJ_1003_[ZJOI2006]物流运输_最短路+dp 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1003 分析: 这种一段一段的显 ...
- 洛谷P1772 [ZJOI2006]物流运输
P1772 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线 ...
随机推荐
- RabbitMQ小节
一.RabbitMQ简介 RabbitQM是一款应用程序对应用程序的通讯方法,基于AMQP协议,用Erlang语言开发,因而安装环境配置之前需要首先安装Erlang语言环境.通过客户端发送消息到队列消 ...
- JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
补充: 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变 ...
- [android] 实现返回键操作思路
记录用户点击的操作历史,使用栈数据结构,频繁的操作栈顶(添加,获取,删除),使用LinkedList 捕获用户的返回键操作,响应返回键,返回上一个界面 MainActivity.java /** * ...
- 使用itext导出pdf
导出pdf这个功能是在工作中遇到的,写这个功能的时候遇到了不少的问题,比如中文乱码,不显示的问题,这些问题在我不断的测试,研究后都一一解决了. 第一步,先导入所需要的jar包 第一个jar包是用于解决 ...
- easyui前后台转义字符和普通字符的相互转换问题
昨天碰到一个问题,公司前端使用的是easyui和jquery,页面textarea编写了html代码,传入后台变成了<>类型代码,这样保存到数据库是没有问题的,但是在页面显示的时候需要显示 ...
- jquery居中窗口-页面加载直接居中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- thinkphp下通过页面链接传递的参数获取一次后失效
在thinkphp下通过页面链接传递的参数获取一次后失效,ajax内部无法再次使用.想要使用必须再次用js获取其值,通过ajax传递给后台使用. 1.通过页面链接传递参数给下一页 2.可以再下一页后台 ...
- nodejs的get与post
index.html <html> <body> <form action="/api/v1/records" method="post&q ...
- [国家集训队2012]middle(陈立杰)
我是萌萌的传送门 我是另一个萌萌的传送门 脑残错误毁一下午…… 其实题解早就烂大街了,然而很久之前我只知道是二分答案+主席树却想不出来这俩玩意儿怎么一块儿用的……今天又翻了几篇题解才恍然大悟,是把权值 ...
- Mavn 使用介绍
1 Maven介绍 1.1 项目开发中遇到的问题 1.都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? 2.为什么在我的机器上可以正常打包,而配置管理员却打不出来? 3.项目 ...