提供一个只能得88分的错误状态定义

P1850 [NOIP2016 提高组] 换教室

@[颜伟业_C_Asm](/space/show?uid=56917) 为啥要判断上个课程是不是申请过的啊,本蒟蒻88分,不太懂
by jklover @ 2018-08-21 10:01:28


```cpp #include<algorithm> #include<cstdio> #include<cstring> #include<string> #include<time.h> #include<iostream> #include<queue> #include<stack> #include<map> #include<cmath> #define ll long long #define oo 0x7fffffff #define MAXN 2018 #define MAXC 329 using namespace std; inline int read() { int out=0,fh=1; char cc=getchar(); while ((cc>'9'||cc<'0')&&cc!='-') cc=getchar(); if (cc=='-') { fh=-1; cc=getchar(); } while (cc>='0'&&cc<='9') { out=out*10+cc-'0'; cc=getchar(); } return out*fh; } double e[MAXC][MAXC]; double f[MAXN][2][MAXN]; int c[MAXN],d[MAXN]; int N,M,V,E; double p[MAXN]; inline void Floyd() { for(register int i=0;i<=N+10;++i) for(register int j=0;j<=N+10;++j) f[i][0][j]=f[i][1][j]=-1; for(register int i=1;i<=V;++i) e[i][i]=0; for(register int k=1;k<=V;++k) for(register int i=1;i<=V;++i) for(register int j=1;j<=V;++j) e[i][j]=min(e[i][j],e[i][k]+e[k][j]); c[0]=d[0]=0; e[0][c[1]]=e[0][d[1]]=0; } double dp(int i,int pre,int j) { if(j<0) return oo; if(f[i][pre][j]!=-1) return f[i][pre][j]; double& ans=f[i][pre][j]; if(ans==-1) ans=oo; if(i>N) return ans=0; if(pre==0) { ans=min(ans,dp(i+1,0,j)+e[c[i-1]][c[i]]); ans=min(ans,(1-p[i])*(dp(i+1,0,j-1)+e[c[i-1]][c[i]])+p[i]*(dp(i+1,1,j-1)+e[c[i-1]][d[i]])); } else { ans=min(ans,dp(i+1,0,j)+e[d[i-1]][c[i]]); ans=min(ans,(1-p[i])*(dp(i+1,0,j-1)+e[d[i-1]][c[i]])+p[i]*(dp(i+1,1,j-1)+e[d[i-1]][d[i]])); } return ans; } int main() { //freopen(".in","r",stdin); //freopen(".out","w",stdout); N=read(),M=read(),V=read(),E=read(); for(register int i=1;i<=N;++i) c[i]=read(); for(register int i=1;i<=N;++i) d[i]=read(); for(register int i=1;i<=N;++i) scanf("%lf",&p[i]); memset(e,0x7f,sizeof(e)); for(register int i=1;i<=E;++i) { int a=read(),b=read(); double w; scanf("%lf",&w); e[a][b]=min(e[a][b],w); e[b][a]=min(e[b][a],w); } Floyd(); printf("%.2lf",dp(1,0,M)); //fclose(stdin); //fclose(stdout); return 0; } ```
by jklover @ 2018-08-21 10:09:39


|