[bzoj1003] [ZJOI2006]物流运输trans

不难想到本题的方程为f[i]=min(min(f[j]+cover(j+1,i)*(i-j)+k)(0<j<i),cover(1,i)*i(j=0)),其中cover(x,y)为若第x天到第y天走相同的路的最短路(注意cover(x,y)可能并不存在!!)

之后的就是实现的问题了,由于最近非常不仔细,连一道最裸的完全背包题都因为输入输出调上30+分钟,故代码很挫,各位神犇不要鄙视...

const
	MAXM=20;
	MAXN=100;
var
	l,n,m,k,e,d:longint;
	ed,cost,pre:array[1..500]of longint;
	last:array[1..MAXM]of longint;
	fbd:array[1..MAXN,0..MAXM]of longint;
	f:array[0..MAXN]of longint;
	dis:Array[1..MAXM]of longint;
	h,hash:array[1..MAXM]of boolean;
procedure add(x,y,z:longint);
begin
	inc(l);
	ed[l]:=y;cost[l]:=z;
	pre[l]:=last[x];last[x]:=l;
end;
procedure init;
var i,j,x,y,z:longint;
begin
	l:=0;
	readln(n,m,k,e);
	for i:=1 to e do
	begin
		readln(x,y,z);
		add(x,y,z);
		add(y,x,z);
	end;
	readln(d);
	for i:=1 to d do
	begin
		readln(x,y,z);
		for j:=y to z do
		begin
			inc(fbd[j][0]);
			fbd[j][fbd[j][0]]:=x;
		end;
	end;
end;
function cover(x,y:longint):longint;
var i,j,v,min,top:longint;
begin
	fillchar(h,sizeof(h),0);
	fillchar(hash,sizeof(hash),0);
	top:=m;
	for i:=x to y do
		for j:=1 to fbd[i][0] do
		if(not hash[fbd[i][j]])then
		begin
			dec(top);hash[fbd[i][j]]:=true;
		end;
	for i:=1 to m do dis[i]:=maxlongint;
	dis[1]:=0;
	for i:=1 to top-1 do
	begin
		min:=maxlongint;v:=-1;
		for j:=1 to m do
		if(not (hash[j] or h[j]))and(dis[j]<min)then
		begin
			v:=j;min:=dis[j];
		end;
		h[v]:=true;
		j:=last[v];
		while(j>0)do
		begin
			if(not(hash[ed[j]] or h[ed[j]]))and(dis[ed[j]]>dis[v]+cost[j])then
				dis[ed[j]]:=dis[v]+cost[j];
			j:=pre[j];
		end;
	end;
	exit(dis[m]);
end;
function min(a,b:longint):longint;
begin
	if(a>b)then exit(b) else exit(a);
end;
procedure dp;
var i,j,t:longint;
begin
	for i:=1 to n do
	begin
		f[i]:=cover(1,i);
		if(f[i]<>maxlongint)then f[i]:=f[i]*i;
		for j:=1 to i-1 do
		begin
			t:=cover(j+1,i);
			if(t<>maxlongint)then
			begin
				f[i]:=min(f[i],f[j]+t*(i-j)+k);
			end;
		end;
	end;
	writeln(f[n]);
end;
begin
	init;
	dp;
end.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值