一直不会做,觉得这是一道神题

于是万般无奈下去借鉴抄了一下题解

发现这就是一道套路题

我们用\(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]物流运输】的更多相关文章

  1. [ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5999  Solved: 2473[Submit][Stat ...

  2. bzoj1003 [ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6300  Solved: 2597[Submit][Stat ...

  3. 【bzoj1003】[ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6331  Solved: 2610[Submit][Stat ...

  4. bzoj1003: [ZJOI2006]物流运输

    dp+最短路.暴力枚举就可以了.O(n3logn).样例中m=n然后测样例过了.然后 54行习惯性的dis[n]然后就WA了!!!. #include<cstdio> #include&l ...

  5. BZOJP1003 [ZJOI2006]物流运输trans

    BZOJP1003 [ZJOI2006]物流运输trans 1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec  Memory Limit: 162 MB Sub ...

  6. BZOJ 1003 [ZJOI2006]物流运输trans

    1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4242  Solved: 1765[Submit] ...

  7. bzoj1003[ZJOI2006]物流运输trans

    1003: [ZJOI2006]物流运输trans Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常 ...

  8. BZOJ 1003: [ZJOI2006]物流运输trans(最短路+dp)

    1A,爽! cost[i][j]表示从第i天到第j天不改路线所需的最小花费,这个可以用最短路预处理出.然后dp(i)=cost[j][i]+dp(j-1)+c. c为该路线的花费. --------- ...

  9. BZOJ_1003_[ZJOI2006]物流运输_最短路+dp

    BZOJ_1003_[ZJOI2006]物流运输_最短路+dp 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1003 分析: 这种一段一段的显 ...

  10. 洛谷P1772 [ZJOI2006]物流运输

    P1772 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线 ...

随机推荐

  1. C# [method Modifiers] abstract virtual override new

    abstract :表示方法是抽象方法,在子类中必须重写.抽象方法所在的类必须是抽象类,即用abstract modifiers:virtual:表示此方法是virtual方法,除了在子类中可以重写外 ...

  2. Linux 更新python至2.7后ImportError: No module named _ssl

    原文:http://blog.51cto.com/hunt1574/1630961 编译安装python 2.7后无法导入ssl包 解决办法: 1 下载地址:http://www.openssl.or ...

  3. 把一个项目a生成后放在另一个项目b使用(b项目是例子中的ScreenWebPage_Tool)

    a项目属性---生成事件---后期生成事件命令行   xcopy /r /y  $(TargetDir)*.* $(SolutionDir)ScreenWebPage_Tool\bin\Debug\* ...

  4. JavaScript的进阶之路(二)函数简介,变量、作用域和内存问题

    <h3>ECMAScript中函数不存在函数签名的概念,没有重载</h3><h3>无需指定返回值,可以在任何时候返回任何值.未指定返回值的函数,返回的是一个特殊的u ...

  5. 原生ajax与封装的ajax使用方法

    当我们不会写后端接口来测试ajax时,我们可以使用node环境创建一个本地服务器. 1.创建一个本地服务器可参考http://www.cnblogs.com/heyujun-/p/6793900.ht ...

  6. C语言归并排序

    这篇文章是学习了小甲鱼-数据结构与算法结合自考教材编写出的代码,希望自己逐渐在算法造诣上能更上一层楼. 归并排序(递归实现) “归并”一词在中文含义中就是合并的意思,而在数据结构中的定义是将两个或者两 ...

  7. Java基础学习总结一(Java语言发展历史、JDK下载安装以及配置环境变量)

    最近一段时间计划复习一下java基础知识,使用的视频课程是尚学堂高淇老师的,上课过程中的心得体会直接总结一下,方便以后复习. 一:计算机语言的发展 1:机器语言,最原始的语言,主要有“01”构成,最早 ...

  8. Apache服务器运维笔记(3)----容器部分

    1.<IfModule>容器 <IfModule>容器作用于模块,它会首先判断模块是否载入,然后再决定是否进行处理,也就是说只有当判断结果为真时才会执行容器内的指令,相反如果为 ...

  9. 基础架构之Maven私有库

    Maven对于Java开发来说肯定不会陌生,由于各种问题,公司常常需要搭建自己的私有Maven仓库. (一)  环境要求 Centos 7.5.1804 Docker 18.06.1-ce sonat ...

  10. Vue2.0中的Ajax请求

    Vue可以借助于vue-resource来实现Ajax请求 http请求报文 浏览器与服务器数据交互是遵循http协议的,当浏览器要访问服务器的时候,浏览器需要将相关请求数据提交给服务器. 格式分为: ...