跪求神犇帮我看看哪里错了。。。样例都过不了
查看原帖
跪求神犇帮我看看哪里错了。。。样例都过不了
177838
IGD_XW楼主2020/9/19 09:57
#include<bits/stdc++.h>
using namespace std;
int n,m,v,e;
int c[2010],d[2010];
double dp[2010][2010][5];
double p[2010];
int a[310][310];
int main()
{
	cin>>n>>m>>v>>e;
	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>>p[i];
	memset(a,0x3f,sizeof(a));
	for(int i=1;i<=e;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		a[x][y]=z;
		a[y][x]=z;
	}
	for(int k=1;k<=v;k++)
	{
		for(int i=1;i<=v;i++)
		{
			for(int j=1;j<=v;j++)
			{
				if(i==j) continue;
				a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
			}
		}
	}
	for(int i=0;i<=n;i++)
	{
		for(int j=0;j<=m;j++)
		{
			dp[i][j][1]=999999.0;
			dp[i][j][0]=999999.0;
		}
	}
	dp[0][0][0]=0;
	dp[0][0][1]=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=min(i,m);j++)
		{
			dp[i][j][0]=min(dp[i-1][j][0]*1.0,dp[i-1][j][1]*1.0);
			if(j!=0) dp[i][j][1]=min(dp[i-1][j-1][0]*1.0+1.0*a[c[i]][d[i]]*p[i],dp[i-1][j-1][1]*1.0+1.0*a[c[i]][d[i]]*p[i]);
		}
	}
	double minn=999999.0;
	for(int i=1;i<=m;i++)
	{
		minn=min(minn,dp[n][i][0]);
		minn=min(minn,dp[n][i][1]);
	}
	printf("%0.2f",minn);
	return 0;
}
2020/9/19 09:57
加载中...