社区讨论
震惊!!少年多年心血竟只得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 条回复,欢迎继续交流。
正在加载回复...