wa20pts dp求助 码风良好
查看原帖
wa20pts dp求助 码风良好
760859
Let_Fly楼主2023/7/15 14:15
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N=305,NN=2005;

double minn(double x,double y){
    return x<y?x:y;
}

int n,m,v,e;
int dij[N][N];//shortest road (i to j)
double k[NN],ans=1e8+1.0;
int c[NN],d[NN];
double dp[NN][NN][2];

signed main(){
    cin>>n>>m>>v>>e;
    memset(dij,127,sizeof dij);
    memset(dp,127,sizeof dp);
    for(int i=1;i<=n;i++) cin>>c[i];
    for(int i=1;i<=n;i++) cin>>d[i];
    for(int i=1;i<=n;i++) cin>>k[i];
    for(int i=1;i<=e;i++){
        int u,v,w;
        cin>>u>>v>>w;
        dij[u][v]=dij[v][u]=minn(dij[u][v],w);
    }
    for(int z=1;z<=v;z++)
        for(int i=1;i<=v;i++)
            for(int j=1;j<i;j++)
                if(dij[i][j]>dij[i][z]+dij[z][j])
                    dij[i][j]=dij[j][i]=dij[i][z]+dij[z][j];
    dp[1][0][0]=dp[1][1][0]=dp[1][1][1]=0;
    for(int i=2;i<=n;i++){
        for(int j=0;j<=min(m,i);j++){
            dp[i][j][0]=minn(
                dp[i-1][j][0]
                        +
                dij[c[i-1]][c[i]]
                        ,
                dp[i-1][j][1]
                        +
                dij[c[i-1]][c[i]]*(1-k[i-1])
                        +
                dij[d[i-1]][c[i]]*k[i-1]
            );
            if(j>0)
            dp[i][j][1]=minn(
                dp[i-1][j-1][0]
                        +
                dij[c[i-1]][c[i]]*(1-k[i])
                        +
                dij[c[i-1]][d[i]]*k[i]
                        ,
                dp[i-1][j-1][1]
                        +
                dij[c[i-1]][c[i]]*(1-k[i-1])*(1-k[i])
                        +
                dij[c[i-1]][d[i]]*(1-k[i-1])*k[i]
                        +
                dij[d[i-1]][c[i]]*k[i-1]*(1-k[i])
                        +
                dij[d[i-1]][d[i]]*k[i-1]*k[i]
            );
        }
    }
    for(int i=0;i<=m;i++){
        ans=minn(minn(dp[n][i][1],dp[n][i][0]),ans);
    }
    printf("%.2lf",ans);
    return 0;
}
2023/7/15 14:15
加载中...