WA 28pts 求助
查看原帖
WA 28pts 求助
356003
Moeebius楼主2022/2/26 20:55

写完32pts,照着第一篇题解改完变成28pts,求查错qwq

#include<bits/stdc++.h>
using namespace std;
template<typename tp>
void read(tp & tmp)
{
	char c=getchar();
	while(!isdigit(c)) c=getchar();
	tmp=0;
	while(isdigit(c))
	{
		tmp=tmp*10+c-'0';
		c=getchar();
	}
}
template<typename tp, typename... args>
void read(tp & tmp, args& ...tmps)
{
	read(tmp);read(tmps...);
}
#define For(i,j,k) for(register int i=(j); i<=(k); ++i)
int n,m,v,e;
int c[2001],d[2001];
double kkk[2001];
int f[301][301];

void Floyd()
{
	For(k,1,v)
	For(i,1,v)
	For(j,1,v)
	f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
}

double dp[2001][2001][2];

int main()
{
	read(n,m,v,e);
	For(i,1,n) read(c[i]);
	For(i,1,n) read(d[i]);
	For(i,1,n) scanf("%lf",&kkk[i]);
	memset(f,0x3f,sizeof(f));
	For(i,1,v) f[i][i]=0;
	For(i,1,e)
	{
		int u,vv,w;
		read(u,vv,w);
		f[u][vv]=min(f[u][vv],w);
		f[vv][u]=min(f[vv][u],w);
	}
	Floyd();
	For(i,0,n) For(j,0,m) dp[i][j][0]=dp[i][j][1]=1e17+5;
	dp[1][0][0]=dp[1][1][1]=0;
	For(i,2,n){
		dp[i][0][0]=dp[i-1][0][0]+f[c[i-1]][c[i]];
		For(j,1,min(m,i))
		{
			int st1=c[i-1],ed1=d[i-1],st2=c[i],ed2=d[i];
			dp[i][j][0]=min(min(dp[i-1][j][0]+f[st1][ed1], dp[i-1][j][1]+1.0*f[st1][ed1]*(1-kkk[i-1])+1.0*f[st2][ed1]*kkk[i-1]),dp[i][j][0]);
			dp[i][j][1]=min(min(dp[i-1][j-1][0]+1.0*f[st1][ed1]*(1-kkk[i])+1.0*f[st1][ed2]*kkk[i],dp[i-1][j-1][1]+1.0*f[st1][ed1]*(1-kkk[i])*(1-kkk[i-1])+1.0*f[st1][ed2]*kkk[i]*(1-kkk[i-1])+1.0*f[st2][ed1]*(1-kkk[i])*kkk[i-1]+1.0*f[st2][ed2]*kkk[i]*kkk[i-1]),dp[i][j][1]);	
			/*
			dp[i][j][0] = min(dp[i][j][0], min(dp[i - 1][j][0] + mp[C1][C3], dp[i - 1][j][1] + mp[C1][C3] * (1 - k[i - 1]) + mp[C2][C3] * k[i - 1]));
            dp[i][j][1] = min(dp[i][j][1], min(dp[i - 1][j - 1][0] + mp[C1][C3] * (1 - k[i]) + mp[C1][C4] * k[i], dp[i - 1][j - 1][1] + mp[C2][C4] * k[i] * k[i - 1] + mp[C2][C3] * k[i - 1] * (1 - k[i]) + mp[C1][C4] * (1 - k[i - 1]) * k[i] + mp[C1][C3] * (1 - k[i - 1]) * (1 - k[i])));
			*/
			//dp[i][j][1]=1e9;
		}
	}
	double ans=1e17+5;
	For(i,0,m) ans=min(ans,min(dp[n][i][0],dp[n][i][1]));
	printf("%.2lf",ans);
	return 0;
}
2022/2/26 20:55
加载中...