Very good DP, continue to practice DP AH
#include <bits/stdc++.h>#defineRep (i,x,y) for (register int i=x;i<=y;i++)using namespacestd;Const intn=2e3+ -;Const Doubleinf=1e8+5;Const intv=305;intN,m,v,e,c[n],d[n],g[v][v];Doublek[n],f[n][n][2],ans;inlineintRead () {intx=0, f=1;CharCh=GetChar (); while(!isdigit (CH)) {if(ch=='-') f=-1; ch=GetChar ();} while(IsDigit (CH)) {x= (x<<1) + (x<<3) + (ch^ -); ch=GetChar ();} returnx*F;}intMain () {n=read (), M=read (), V=read (), e=read (); Rep (I,1, N) c[i]=read (); Rep (I,1, N) d[i]=read (); Rep (I,1, N) cin>>K[i]; Memset (g, the,sizeofg); Rep (I,1, E) { intU=read (), V=read (), w=read (); G[U][V]=g[v][u]=min (g[u][v],w);} Rep (K,1, V) Rep (I,1, V) Rep (J,1, v) g[i][j]=min (g[i][k]+G[k][j],g[i][j]); Rep (I,1, V) g[i][i]=g[i][0]=g[0][i]=0; Rep (I,0, N) Rep (J,0, m) f[i][j][0]=f[i][j][1]=inf; f[1][0][0]=f[1][1][1]=0; Rep (I,2, N) {f[i][0][0]=f[i-1][0][0]+g[c[i-1]][c[i]]; Rep (J,1, Min (i,m)) { intk1=c[i-1],k2=d[i-1],k3=c[i],k4=D[i]; f[i][j][0]=min (f[i][j][0],f[i-1][j][0]+G[k1][k3]); f[i][j][0]=min (f[i][j][0],f[i-1][j][1]+g[k1][k3]* (1-k[i-1]) +g[k2][k3]*k[i-1]); f[i][j][1]=min (f[i][j][1],f[i-1][j-1][0]+g[k1][k3]* (1-k[i]) +g[k1][k4]*K[i]); f[i][j][1]=min (f[i][j][1],f[i-1][j-1][1]+g[k1][k3]* (1-k[i-1])*(1-k[i]) +g[k2][k3]*k[i-1]*(1-k[i]) +g[k1][k4]* (1-k[i-1]) *k[i]+g[k2][k4]*k[i-1]*K[i]); }}ans=inf; Rep (I,0, m) ans=min (Ans,min (f[n][i][0],f[n][i][1])); printf ("%.2lf\n", ans);return 0;}
Perky, Next
Probability +DP of noip2016 changing classroom