zoukankan      html  css  js  c++  java
  • bzoj2306: [Ctsc2011]幸福路径

    被踩爆*2

    这个题看起来就很乱搞,因为这个精度要求。。。(开始还猜了个一直转圈圈就可以等比数列了,然而好像很假)

    反正还是无从下手

    结果居然是倍增floyd,滚一维表示走了2^t步时的最大幸福度

    注意初始时自己到自己幸福度为0

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    const int _=10;
    const int maxn=1e2+_;
    const int maxm=1e3+_;
    const double eps=1e-10;
    
    int n;
    double w[maxn],mp[2][maxn][maxn];
    void mem(int now)
    {
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                mp[now][i][j]=-(1<<30);
        for(int i=1;i<=n;i++)mp[now][i][i]=0;
    }
    int main()
    {
        freopen("a.in","r",stdin);
        freopen("a.out","w",stdout);
        int m,st,x,y;double ro;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)scanf("%lf",&w[i]);
        scanf("%d%lf",&st,&ro);
        
        int now=0;mem(now);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&x,&y);
            mp[now][x][y]=w[y]*ro;
        }
        for(;ro>eps;ro*=ro)
        {
            now^=1;mem(now);
            for(int k=1;k<=n;k++)
                for(int i=1;i<=n;i++)
                    for(int j=1;j<=n;j++)
                        mp[now][i][j]=max(mp[now][i][j],mp[now^1][i][k]+mp[now^1][k][j]*ro);
        }
        double ans=0;
        for(int i=1;i<=n;i++)
            ans=max(ans,mp[now][st][i]);
        printf("%.1lf
    ",ans+w[st]);
        
        return 0;
    }
  • 相关阅读:
    每日一练之动态算法
    001之IP基础对话框
    mysql的一些操作
    logcat 提示 Unable to open log device '/dev/log/main': No such file or directory
    之前接触过的测试的相关工具
    SAP内存、ABAP内存
    模块化程序—函数 function
    模块化程序-子例程
    模块化程序-宏
    传输请求的管理
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/10397759.html
Copyright © 2011-2022 走看看