黑龙江2012年省赛J题最小均值圈

/*
Source Code
Problem: 1001
Username: 2010201211
Run Time: 304MS
Memory: 1208K
Language:C++
JudgeStatus: Accepted
Author:MarkLiu
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <stdio.h>
#include <string.h>
using namespace std;

const int N = 201;
const int INF = 1<<20;
int n,d[N][N],kd[N][N],m;
int g[N][N],gn[N];
double karp(){
    for(int i=0;i<=n;i++)
        for(int j=0;j<n;j++)
            kd[i][j]=INF;
    for(int i=0;i<n;i++)
        kd[0][i]=0;
    for(int i=1;i<=n;i++)
        for(int j=0;j<n;j++)
            if(kd[i-1][j]==INF) continue;
            else for(int k=gn[j]-1;k>=0;k--)
                kd[i][g[j][k]] = min(kd[i][g[j][k]],kd[i-1][j]+d[j][g[j][k]]);
    //cout << "debug" << endl;
    double minc=1e20;bool est=false;
    for(int i=0;i<n;i++){
        double mc=-1e20;
        if(kd[n][i]==INF) continue;
        for(int j=0;j<n;j++)
            if(kd[j][i]!=INF){
                mc=max(mc,1.0*(kd[n][i]-kd[j][i])/(n-j));
                est=true;
            }
        minc=min(minc,mc);
    }
    if(!est) minc=1e50;
    return minc;
}

int main(){
    //freopen("in.txt","r",stdin);
    int a,b,c;
    while(scanf("%d%d",&n,&m)!=EOF){
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++){
                if(i==j) d[i][j]=INF;
                else d[i][j]=INF;
            }

        while(m--){
            scanf("%d%d%d",&a,&b,&c);
            if(c<d[a-1][b-1])
                d[a-1][b-1]=c;
        }
        memset(g,0,sizeof(g));
        memset(gn,0,sizeof(gn));
        for(int i=0;i<n;i++){
            int cnt=0;
            for(int j=0;j<n;j++){
                if(d[i][j]!=0 && d[i][j]!=INF){
                    g[i][cnt++]=j;
                }
            }
            gn[i]=cnt;
        }
        /*for(int i=0;i<n;i++){
            for(int j=0;j<gn[i];j++){
                printf("%d ",g[i][j]);
            }
            cout << endl;
        }*/
        double res=karp();
        if(res==1e50) printf("INF\n");
        else{
            printf("%.3lf\n",res+1e-9);
        }

    }
    return 0;
}
/*
Sample Input:
 3
 2 2
 3 2
 1 1
 7
 1 14
 1 969
 3 518
 5 948
 2 962
 2 221
 1 935
 3
 3 2
 2 2
 1 1
Sample Output:
.667
.000
.000
*/

 

 

有重边,有自环,卡精度.

 

来自 Eric.cpp

内容概要:本文深入研究了基于深度强化学习(DRL)的微网储能系统控制策略。首先介绍了微网系统的组成及其特性,重点探讨了光伏发电、储能系统和负荷系统的关键组件数学模型。接着详细描述了Simulink仿真设计实现,包括微网环境模拟类(MicrogridEnv)、双重深度Q网络(Double DQN)算法的实现以及训练过程。为了验证该方法的有效性,文章还进行了对比实验,分别测试了规则策略、传统优化方法和DDQN策略的表现。实验结果显示,DDQN策略在成本节约、SOC合规率等方面明显优于其他两种方法。最后,本文提出了创新点与贡献总结,包括仿真-学习一体化框架、改进的DRL算法以及多维度验证,并展望了后续研究方向如多时间尺度优化、多能源协同、不确定性处理等。 适用人群:从事电力系统、微网技术研究的专业人士,以及对深度强化学习应用于能源领域感兴趣的科研人员和工程师。 使用场景及目标:①掌握微网储能系统的基本构成与工作原理;②理解如何利用深度强化学习优化微网储能控制策略;③学习具体的算法实现细节,包括环境搭建、DDQN算法实现和训练流程;④对比不同控制策略的效果,评估DDQN策略的优势。 其他说明:本文不仅提供了理论分析和技术实现,还展示了详细的实验验证过程,通过具体的实验数据证明了所提方法的有效性。此外,文中提及的多种改进措施和技术细节对于实际工程项目具有重要的参考价值。阅读本文有助于读者全面了解微网储能控制领域的最新进展,为相关研究和技术开发提供有益的指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值