调了几个月了,样例不过,qwq…………

P1850 [NOIP2016 提高组] 换教室

```cpp #include<bits/stdc++.h> using namespace std; int n,m,v,e; int c[2005],d[2005]; double k[2005],dp[2005][2005],f[2005][2005][2]; int main() { cin>>n>>m>>v>>e; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) f[i][j][0]=f[i][j][1]=9000000; for(int i=1;i<=v;i++) for(int j=1;j<=v;j++) dp[i][j]=9000000; for(int i=0;i<=v;i++) dp[i][i]=dp[i][0]=dp[0][i]=0; 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 a,b; double c; cin>>a>>b>>c; dp[a][b]=min(c,dp[a][b]); dp[b][a]=min(c,dp[b][a]); } for(int kk=1;kk<=v;kk++) for(int i=1;i<=v;i++) for(int j=1;j<=v;j++) dp[i][j]=min(dp[i][j]*1ll,1ll*dp[i][kk]+1ll*dp[kk][j]); f[1][0][0]=f[1][1][1]=0; for(int i=2;i<=n;i++) { f[i][0][0]=f[i-1][0][0]+dp[c[i-1]][c[i]]; for(int j=1;j<=min(i,m);j++) { f[i][j][0]=min(f[i-1][j][0]+ dp[c[i-1]][c[i]], f[i-1][j][1]+ dp[d[i-1]][c[i]]*k[i-1]+ dp[c[i-1]][c[i]]*(1-k[i-1])); f[i][j][1]=min(f[i-1][j-1][0]+ dp[c[i-1]][d[i]]*k[i]+ dp[c[i-1]][c[i]]*(1-k[i]), f[i-1][j-1][1]+ dp[d[i-1]][d[i]]*(k[i-1]*k[i])+ dp[d[i-1]][c[i]]*(k[i-1]*(1-k[i]))+ dp[c[i-1]][d[i]]*((1-k[i-1])*k[i])+ dp[c[i-1]][c[i]]*((1-k[i-1])*(1-k[i]))); } } // for(int i=1;i<=n;i++) // for(int j=0;j<=min(i,m);j++) // cout<<f[i][j][0]<<" "<<f[i][j][1]<<'\n'; double ans=f[n][0][0]; for(int i=1;i<=m;i++) ans=min(ans,min(f[n][i][1],f[n][i][0])); printf("%.2lf",ans); return 0; } ```
by YT0104 @ 2022-10-19 20:06:59


C,问题找到了qwq
by YT0104 @ 2022-10-20 21:36:54


```cpp for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) f[i][j][0]=f[i][j][1]=9000000; ``` '1' —> '0' \n 样例不过(32分)-->100分 qwq
by YT0104 @ 2022-10-20 21:43:22


|