bzoj1003物流运输——DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1003
DP好题;
直接找一个时间段的最短路,并用它来预处理出每个时间段的最小花费;
f[i]代表一条路走到时间的花费,所以转移要加上K。
枚举所有路线的TLE代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,K,e,head[],ct,D,d[],rt[],pr[],f[][],cnt,ans;
bool vis[];
struct N{
int to,next,w;
N(int t=,int n=,int w=):to(t),next(n),w(w) {}
}edge[];
void dfs(int x,int r,int p)
{
if(x==m)
{
rt[++cnt]=(r|(<<(m-)));
pr[cnt]=p;
return;
}
vis[x]=;
for(int i=head[x];i;i=edge[i].next)
{
int v=edge[i].to;
if(vis[v])continue;
dfs(v,(r|(<<(v-))),p+edge[i].w);
}
vis[x]=;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&K,&e);
for(int i=,x,y,z;i<=e;i++)
{
scanf("%d%d%d",&x,&y,&z);
edge[++ct]=N(y,head[x],z);head[x]=ct;
edge[++ct]=N(x,head[y],z);head[y]=ct;
}
scanf("%d",&D);
for(int i=,p,a,b;i<=D;i++)
{
scanf("%d%d%d",&p,&a,&b);
for(int j=a;j<=b;j++)d[j]|=(<<(p-));//第j天不能通过的码头
}
dfs(,,);
memset(f,0x3f,sizeof f);
for(int j=;j<=cnt;j++)f[][j]=;
for(int i=;i<=n;i++)
for(int j=;j<=cnt;j++)
{
if(rt[j]&d[i])continue;
for(int k=;k<=cnt;k++)
f[i][j]=min(f[i][j],f[i-][k]+(j==k?pr[j]:K+pr[j]));
}
ans=0x3f;
for(int j=;j<=cnt;j++)ans=min(ans,f[n][j]);
printf("%d",ans);
return ;
}
囧
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
queue<int>q;
int const inf=0x3f3f3f3f;
int n,m,K,e,head[],ct,mr[][],D,zt[],dis[],f[];
bool vis[],d[][];
struct N{
int to,next,w;
N(int t=,int n=,int w=):to(t),next(n),w(w) {}
}edge[];
void spfa()
{
memset(vis,,sizeof vis);
memset(dis,0x3f,sizeof dis);
while(q.size())q.pop();
dis[]=;q.push();vis[]=;
while(q.size())
{
int x=q.front();q.pop();vis[x]=;
for(int i=head[x];i;i=edge[i].next)
{
int v=edge[i].to;
if(dis[v]>dis[x]+edge[i].w&&!zt[v])
{
dis[v]=dis[x]+edge[i].w;
if(!vis[v])vis[v]=,q.push(v);
}
}
}
}
int main()
{
scanf("%d%d%d%d",&n,&m,&K,&e);
for(int i=,x,y,z;i<=e;i++)
{
scanf("%d%d%d",&x,&y,&z);
edge[++ct]=N(y,head[x],z);head[x]=ct;
edge[++ct]=N(x,head[y],z);head[y]=ct;
}
scanf("%d",&D);
for(int i=,p,a,b;i<=D;i++)
{
scanf("%d%d%d",&p,&a,&b);
for(int j=a;j<=b;j++)d[p][j]=;
}
for(int i=;i<=n;i++)
{
memset(zt,,sizeof zt);
for(int j=i;j<=n;j++)
{
for(int k=;k<=m;k++)zt[k]|=d[k][j];
spfa();
mr[i][j]=dis[m];//在下面乘 小心爆int
}
}
for (int i=;i<=n;i++)
for (int j=i;j<=n;j++)
if (mr[i][j]<inf)mr[i][j]*=(j-i+);
for(int i=;i<=n;i++)f[i]=mr[][i];
for(int i=;i<=n;i++)
{
for(int j=;j<i;j++)
f[i]=min(f[i],f[j]+mr[j+][i]+K);
}
printf("%d",f[n]);
return ;
}
bzoj1003物流运输——DP的更多相关文章
- bzoj1003物流运输 最短路+DP
bzoj1003物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输 ...
- BZOJ1003 物流运输 最短路+DP
1003: [ZJOI2006]物流运输 Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条 ...
- BZOJ-1003 物流运输trans SPFA+DP
傻逼错误耗我1h,没给全范围坑我1A.... 1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec Memory Limit: 162 MB Submit: 529 ...
- BZOJ 1003 物流运输 (dp + dijkstra)
1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 8672 Solved: 3678[Submit][Stat ...
- bzoj1003 物流运输
Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...
- P1772 [ZJOI2006]物流运输[DP+最短路]
题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...
- 1003: [ZJOI2006]物流运输 = DP+SBFA
题意就是告诉你有n个点,e条边,m天,每天都会从起点到终点走一次最短路,但是有些点在某些时间段是不可走的,因此在某些天需要改变路径,每次改变路径的成本是K,总成本=n天运输路线长度之和+K*改变运输路 ...
- BZOJ.1003.[ZJOI2006]物流运输(DP 最短路Dijkstra)
题目链接 容易看出是个最短路+DP.既然答案和天数有关,那么就令\(f[i]\)表示前\(i\)天最小成本. 这个转移很好想: \(f[i]=\min(f[i],\ f[j]+cost(j+1,i)+ ...
- BZoj 1003 物流运输 DP+最短路
2013-09-11 09:56 W[I]代表前I天能取得的最小花费,假设在第J天更改一次路线,那么如果有 W[I]>W[J]+第j+1到第I天的最小花费+更改路线的花费(K) 那么更新W[I] ...
随机推荐
- [Bzoj3172][Tjoi2013]单词(fail树)
3172: [Tjoi2013]单词 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 4777 Solved: 2345[Submit][Status ...
- NOIP临考经验(转)
[COGS]NOIP临考经验 1. 提前15分钟入场,此时静坐调整心态,适当的深呼吸 2. 打开编辑器并调整为自己喜欢的界面 3. 熟悉文件目录,写好准确无误的代码模板 4. 压缩包或许还不能 ...
- transition、animation在macbook air上图片动画边缘抖动2
示例: BUG描述: 最近同事一项目中,产品提出在macbook air上,列表图片放大效果边缘出现抖动现象.在retina屏上没有此问题. 调试过程: 1.单独把结构分离.确定是否由其他元素引起. ...
- logistics regression
logistics regression用于解决一些二分类问题.比如(纯假设)网上购物时,网站会判断一个人退货的可能性有多大,如果该用户退货的可能性很大,那么网站就不会推荐改用户购买退费险.反之,如果 ...
- 怎样使用1M的内存排序100万个8位数
今天看到这篇文章.颇为震撼.感叹算法之"神通". 借助于合适的算法能够完毕看似不可能的事情. 最早这个问题是在Stack Overflow站点上面给出的(Sorting numbe ...
- 微信小程序 - 音频播放(1.2版本和1.2版本之后)
不多说了,直接贴code // 1.2版本以后便不在维护 wx.getBackgroundAudioManager({ success:function(res){ var status =res.s ...
- 进程监控模块配置与使用 ------ACE(开源项目)
下面我先从此工程的作用讲起: 此工程适用于程序异常退出,然后自动重启该程序.对于,系统重启不了该进程,那此程序将返回-1,也无法进行下一步工作. 下面,先从配置开始讲起: 参考资料:http://hi ...
- uva 11468 - Substring(AC自己主动机+概率)
题目链接:uva 11468 - Substring 题目大意:给出一些字符和各自字符相应的选择概率.随机选择L次后得到一个长度为L的字符串,要求该字符串不包括随意一个子串的概率. 解题思路:构造AC ...
- China Vis 2015 会议小结
China Vis 2015 Paper有6个分会场.主要有 1.天气.气象.灾害可视化. 2.文本可视化应用: 3.树.网络.以及高维技术. 4.时空分析. 5.科学可视化与应用: 五个方面主题. ...
- 令人赞叹的 MySQL
原文链接 译文链接 感谢 艾凌风 小伙伴校稿 令人赞叹的 MySQL 一个很棒的 MySQL 软件.库以及资源列表. 这个列表接受并鼓舞 pull requests,请看 CONTRIBUTING 文 ...