社区讨论

震惊!!少年多年心血竟只得28分!!!

P1850[NOIP 2016 提高组] 换教室参与者 6已保存回复 11

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
11 条
当前快照
1 份
快照标识符
@mi6xzo5p
此快照首次捕获于
2025/11/20 12:39
4 个月前
此快照最后确认于
2025/11/20 15:25
4 个月前
查看原帖
。。好吧我就想吸引你们进来
如题 没过的都是WA
CPP
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int inf=0x7ffffff;
int n,m,v,e;
double f[2003][2003][2];
int c[2003],d[2003];
double k[2003];
double g[301][301];
int main()
{
	cin>>n>>m>>v>>e;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&c[i]);
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&d[i]);
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%lf",&k[i]);
	}
	for(int i=1;i<=e;i++)
	{
		int x,y,w;
		scanf("%d%d%d",&x,&y,&w);
		g[x][y]=g[y][x]=w;
	}
	for(int o=1;o<=v;o++)
	 for(int i=1;i<=v;i++)
	  for(int j=1;j<=v;j++)
	   g[i][j]=min(g[i][j],g[i][o]+g[o][j]);
	   for (register int i = 1; i <= v; i++)g[i][i] = g[i][0] = g[0][i] = 0;//////////////////////////
	for(int i=0;i<=n;i++)
	 for(int j=0;j<=n;j++)
	  f[i][j][0]=f[i][j][1]=inf;
	f[1][1][1]=f[1][0][0]=0;
	double ans=inf;
	for(int i=2;i<=n;i++)
	{
	    f[i][0][0] = f[i - 1][0][0] + g[c[i - 1]][c[i]];///////////
		for(int j=1;j<=min(i,m)/**/;j++)
	    {
		    f[i][j][0]=min(f[i][j][0],min(f[i-1][j][0]+g[c[i-1]][c[i]],f[i-1][j][1]+(g[c[i-1]][c[i]]*(1-k[i-1])+g[d[i-1]][c[i]]*k[i-1])));
		    f[i][j][1]=min(f[i][j][1],min(f[i-1][j-1][0]+(g[c[i-1]][c[i]]*(1-k[i])+g[c[i-1]][d[i]]*k[i]),f[i-1][j-1][1]+(g[d[i-1]][c[i]]*(1-k[i])*k[i-1]+g[c[i-1]][d[i]]*(1-k[i-1])*k[i]+g[c[i-1]][c[i]]*(1-k[i-1])*(1-k[i])+g[d[i-1]][d[i]]*k[i-1]*k[i])));
	    }
	}

	for(int j=0;j<=m;j++)
	  ans=min(min(f[n][j][0],f[n][j][1]),ans);
    printf("%0.2lf",ans);
	return 0;
}
一晚上都砸进去了。。

噫吁嚱!危乎高哉!动规之难难于上青天!

回复

11 条回复,欢迎继续交流。

正在加载回复...