CCF CSP认证201409-4 最优配餐(BFS)

201409-4最优配餐问题通过BFS求解,模拟外卖小哥从分店同时出发,最早到达客户家的小哥完成配送并结算费用。使用long long存储结果,防止超过int范围。二刷优化,节省近100ms运行时间。

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

201409-4 最优配餐

题目
在这里插入图片描述在这里插入图片描述

思路

  • 从各个分店同时bfs,走到客户家了再结算给该客户(们)送餐费用,送完所有客户的餐就退出。
  • 可以想象成m个外卖小哥同时从各分店出发,谁先送到谁的就算数,送到一个就结算一个的钱。 注意这里的ans需要用 long long保存,其可能的最大值是2* n * k *1000,超过了int范围。

AC代码如下

#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
struct point{
   
   
    int x,y;
};
struct node{
   
   //供bfs用,step统计步数,不需要统计每个结点的实时费用
    int x,y,step;
};
int g[1005][1005]={
   
   0},n,m,k,d;
vector<point> store;
bool inq[1005][1005]={
   
   false};
int X[4]={
   
   0,-1,0,1};//向左上右下扩散
int Y[4]={
   
   -1,0,1,0};

long long bfs(){
   
   
    long long ans=0,cnt=0;
    queue<node> q;
    for(int i=0;i<store.size();i++){
   
   //所有外卖小哥从各大分店入列
        q.push((node){
   
   store[i].x,store[i].y,0});
        inq[store[i].x][store[i].y]=true;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值