hdu4848 dfs+剪枝

本文介绍了一种使用Floyd算法预处理星球间最短路径,并结合深度优先搜索(DFS)来寻找遍历所有星球最小时间总和的方法。通过有效的剪枝策略减少不必要的搜索,实现了算法效率的提升。

题意:给定n个星球(编号1~n, n<=30),和从每个星球到达每个星球的时间,再给定到达每个星球的截止时间。从星球1出发,遍历2~n个星球,求每个星球的到达时间的总和。PS:每个星球可能不止经过一次!!!

dis[i][j]:i到j的最短距离,由floyd预处理
time[i]:到达i星球的时间,初始化-1。ans = sigma(time[i]) (2<=i<=n)
剪枝1:以达到当前点u的时间作为剩余点的到达时间(肯定小于搜下去的答案),
若还是大于了当前最优解,则没必要搜下去。
剪枝2:从当前点出发,只要有一个还未到达的点的到达时间大于dl则return;

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 35;
int time[N], ans;//time[i]:到达i的时间
int dl[N], dis[N][N];
int n;

void dfs(int u, int m, int ret)//当前点u,已经到达了m个点,当前总时间ret
{
    if(m==n)//如果到达了所有点,则更新答案
    {
        ans = min(ans, ret);
        return;
    }
    if(ret+time[u]*(n-m)>ans)//剪枝:以达到当前点u的时间作为剩余点的到达时间(肯定小于搜下去的答案) 
        return;              //若还是大于了当前最优解,则没必要搜下去
    for(int i = 2; i <= n; ++i)//剪枝:从当前点出发,只要有一个还未到达的点的到达时间大于dl则return;
        if(time[i]==-1 && time[u]+dis[u][i]>dl[i])
            return;
    for(int i = 2; i <= n; ++i)
        if(time[i]==-1)
        {
            time[i] = time[u]+dis[u][i];
            dfs(i, m+1, ret+time[i]);
            time[i] = -1;
        }
}

int main()
{
    while(~scanf("%d", &n))
    {
        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= n; ++j)
                scanf("%d", &dis[i][j]);
        for(int k = 1; k <= n; ++k)
            for(int i = 1; i <= n; ++i)
                for(int j = 1; j <= n; ++j)
                    dis[i][j] = min(dis[i][j], dis[i][k]+dis[k][j]);
        for(int i = 2; i <= n; ++i) scanf("%d", &dl[i]);
        memset(time, -1, sizeof(time));
        time[1] = 0;
        ans = INF;
        dfs(1, 1, 0);
        if(ans==INF) printf("-1\n");
        else printf("%lld\n", ans);
    }
    return 0;
}
【SCI复现】基于纳什博弈的多微网主体电热双层共享策略研究(Matlab代码实现)内容概要:本文围绕“基于纳什博弈的多微网主体电热双层共享策略研究”展开,结合Matlab代码实现,复现了SCI级别的科研成果。研究聚焦于多个微网主体之间的能源共享问,引入纳什博弈理论构建双层优化模型,上层为各微网间的非合作博弈策略,下层为各微网内部电热联合优化调度,实现能源高效利用与经济性目标的平衡。文中详细阐述了模型构建、博弈均衡求解、约束处理及算法实现过程,并通过Matlab编程进行仿真验证,展示了多微网在电热耦合条件下的运行特性和共享效益。; 适合人群:具备一定电力系统、优化理论和博弈论基础知识的研究生、科研人员及从事能源互联网、微电网优化等相关领域的工程师。; 使用场景及目标:① 学习如何将纳什博弈应用于多主体能源系统优化;② 掌握双层优化模型的建模与求解方法;③ 复现SCI论文中的仿真案例,提升科研实践能力;④ 为微电网集群协同调度、能源共享机制设计提供技术参考。; 阅读建议:建议读者结合Matlab代码逐行理解模型实现细节,重点关注博弈均衡的求解过程与双层结构的迭代逻辑,同时可尝试修改参数或扩展模型以适应不同应用场景,深化对多主体协同优化机制的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值