bzoj 1003 dp+spfa

本文介绍了一种利用SPFA算法进行路径规划的方法,解决在特定条件下从起点到终点的最小成本路径问题。通过预处理不同时间段内的最短路径,并采用动态规划策略,实现了对路径的高效更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:m个码头,每天从1号码头到m号码头,有些码头在某些天是不能经过的,每次修改路线要花cost,求n天最小总成本,总成本=n天经过权值和+修改路线次数*cost

跑n^2遍spfa预处理出第i天到第j天从1号码头到m号码头的最短距离t[i,j]

对于第i天,我们有两种选择

(1)从第一天开始就不改变航线

(2)从第j天开始改变航线一直保持到第i天

即f[i]=min{t[1,i]*i,f[j]+cost+t[j+1,i]*(i-j)}

最终答案f[n]

var
        n,m,cost,e,l    :longint;
        x,y,z           :longint;
        i,j             :longint;
        last,que,dis    :array[0..30] of longint;
        vis,ff          :array[0..30] of boolean;
        flag            :array[0..30,0..110] of boolean;
        t               :array[0..110,0..110] of longint;
        f               :array[0..110] of int64;
        pre,other,len   :array[0..20010] of longint;
function min(a,b:int64):int64;
begin
   if a<b then exit(a) else exit(b);
end;

procedure connect(x,y,z:longint);
begin
   inc(l);
   pre[l]:=last[x];
   last[x]:=l;
   other[l]:=y;
   len[l]:=z;
end;

function spfa(a,b:longint):longint;
var
        h,tl,cur,q,p,i,j:longint;
begin
   fillchar(vis,sizeof(vis),false);
   fillchar(dis,sizeof(dis),127);
   fillchar(ff,sizeof(ff),true);
   for i:=a to b do
     for j:=1 to m do
       if flag[j,i] then ff[j]:=false;
   h:=0; tl:=1; que[1]:=1; dis[1]:=0;
   while (h<>tl) do
   begin
      h:=h mod 105+1;
      cur:=que[h];
      vis[cur]:=false;
      q:=last[cur];
      while (q<>0) do
      begin
         p:=other[q];
         if (dis[p]>dis[cur]+len[q]) and ff[p] then
         begin
            dis[p]:=dis[cur]+len[q];
            if not vis[p] then
            begin
               tl:=tl mod 105+1;
               que[tl]:=p;
               vis[p]:=true;
            end;
         end;
         q:=pre[q];
      end;
   end;
   exit(dis[m]);
end;

begin
   read(n,m,cost,e);
   for i:=1 to e do
   begin
      read(x,y,z);
      connect(x,y,z);
      connect(y,x,z);
   end;
   //
   read(e);
   for i:=1 to e do
   begin
      read(x,y,z);
      for j:=y to z do flag[x,j]:=true;
   end;
   //
   for i:=1 to n do
     for j:=1 to n do t[i,j]:=spfa(i,j);
   //
   f[1]:=t[1,1];
   for i:=2 to n do
   begin
      f[i]:=int64(t[1,i])*int64(i);
      for j:=1 to i-1 do
        f[i]:=min(f[i],f[j]+int64(cost)+int64(t[j+1,i])*int64(i-j));
   end;
   writeln(f[n]);
end.
——by Eirlys



内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值