2018.09.02 bzoj1003: [ZJOI2006]物流运输(dp+最短路转移)
传送门 
dp好题。 
每一天要变更路线一定还是走最短路。 
所以l~r天不变更路线的最优方案就是把l~r天所有不能走的点都删掉再求最短路。显然是可以dp的。 
设f[i]表示第i天的最优花销。那么我们枚举在哪里切换路线更优,则有状态转移方程: 
f[i]=min(f[j]+spfa(j,i)∗(i−j)+k)(j=1...i−1)" role="presentation" style="position: relative;">f[i]=min(f[j]+spfa(j,i)∗(i−j)+k)(j=1...i−1)f[i]=min(f[j]+spfa(j,i)∗(i−j)+k)(j=1...i−1) 
其中spfa时只有合法的点参与。 
另外可以bitset优化一波。 
代码:
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
inline int read(){
    int ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans;
}
int day,n,K,E,f[105],cnt=0,first[30],d[30];
struct edge{int v,w,next;}e[20000];
bool in[30];
bitset<21>del[105];
inline void add(int u,int v,int w){e[++cnt].v=v,e[cnt].next=first[u],e[cnt].w=w,first[u]=cnt;}
inline int spfa(int l,int r){
    queue<int>q;
    bitset<21>dell;
    for(int i=l;i<=r;++i)dell|=del[i];
    for(int i=1;i<=n;++i)in[i]=false,d[i]=inf;
    q.push(1),d[1]=0,in[1]=true;
    while(!q.empty()){
        int x=q.front();
        q.pop(),in[x]=false;
        for(int i=first[x];i;i=e[i].next){
            int v=e[i].v;
            if(dell[v])continue;
            if(d[v]>d[x]+e[i].w){
                d[v]=d[x]+e[i].w;
                if(!in[v])in[v]=true,q.push(v);
            }
        }
    }
    return d[n];
}
int main(){
    day=read(),n=read(),K=read(),E=read();
    for(int i=1;i<=E;++i){
        int a=read(),b=read(),c=read();
        add(a,b,c),add(b,a,c);
    }
    int d=read();
    while(d--){
        int tmp=read(),a=read(),b=read();
        for(int i=a;i<=b;++i)del[i][tmp]=1;
    }
    f[1]=spfa(1,1);
    for(int i=2;i<=day;++i){
        int tmp=spfa(1,i);
        if(tmp!=inf)f[i]=tmp*i;
        else f[i]=inf;
        for(int j=1;j<i;++j){
            tmp=spfa(j+1,i);
            if(tmp!=inf)f[i]=min(f[i],f[j]+K+(i-j)*tmp);
        }
    }
    cout<<f[day];
    return 0;
}2018.09.02 bzoj1003: [ZJOI2006]物流运输(dp+最短路转移)的更多相关文章
- [BZOJ1003] [ZJOI2006] 物流运输trans (最短路 & dp)
		Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ... 
- P1772 [ZJOI2006]物流运输[DP+最短路]
		题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ... 
- BZOJ.1003.[ZJOI2006]物流运输(DP 最短路Dijkstra)
		题目链接 容易看出是个最短路+DP.既然答案和天数有关,那么就令\(f[i]\)表示前\(i\)天最小成本. 这个转移很好想: \(f[i]=\min(f[i],\ f[j]+cost(j+1,i)+ ... 
- [ZJOI2006]物流运输 DP 最短路
		---题面--- 题解: 设f[i]表示到第i天的代价,cost[i][j]表示第i天到第j天采取同一种方案的最小代价.那么转移就很明显了,直接$n^2$枚举即可. 所以问题就变成了怎么获取cost数 ... 
- BZOJ_1003_[ZJOI2006]物流运输_最短路+dp
		BZOJ_1003_[ZJOI2006]物流运输_最短路+dp 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1003 分析: 这种一段一段的显 ... 
- bzoj1003: [ZJOI2006]物流运输(DP+spfa)
		1003: [ZJOI2006]物流运输 题目:传送门 题解: 可以用spfa处理出第i天到第j都走这条路的花费,记录为cost f[i]表示前i天的最小花费:f[i]=min(f[i],f[j-1] ... 
- bzoj1003 [ZJOI2006]物流运输
		1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6300 Solved: 2597[Submit][Stat ... 
- 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为该路线的花费. --------- ... 
随机推荐
- location 对象属性
			Location 对象属性 hash 返回一个URL的锚部分 host 返回一个URL的主机名和端口 hostname 返回URL的主机名 href 返回完整的URL pathname 返回的URL路 ... 
- shiro 与spring的集成
			1.导入spring与shiro的jar包 2.在web.xml 文件中配置shiro的shiroFilter <filter> <filter-name>shiroFilte ... 
- J2SE 8的反射
			1.获得Class的四种方式 //(1) 利用对象调用getClass()方法获取该对象的Class实例 Class<? extends ReflectTest> class1 = new ... 
- starling 第一天
			flashplayer_27_sa_debug: https://files.cnblogs.com/files/dt1991/flashplayer_27_sa_debug.rar flashpla ... 
- C#--抽象工厂设计模式原理
			C#--抽象工厂设计模式原理 C#--抽象工厂设计模式--三层框架 C#--使用反射改进简单工厂 
- Java synchronized(this)锁住的是什么
			synchronized锁住的是括号里面的对象,而不是代码. 对于非static的synchronized方法,锁的就是对象本身,也就是this. 
- ios 给图片加文字
			- (UIImage*) drawText:(NSString*)text inImage:(UIImage*)image { //prepare image context UIGraphicsBe ... 
- Oracle+Mybatis批量插入,更新和删除
			1.插入 (1)第一种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过) <insert id="inse ... 
- JPEG和Variant的转换
			unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, ... 
- Spring  @Qualifier
			先说明下场景,代码如下: 有如下接口: public interface EmployeeService { public EmployeeDto getEmployeeById(Long id); ... 
