经典的DP问题. #include<iostream> using namespace std; const int INF=1000000001; int l1,l2,l3,c1,c2,c3,n; int dis[10001]; int T[10001]; int main() { int i,j,k; int x,y; scanf("%d%d%d%d%d%d",&l1,&l2,&l3,&c1,&c2,&c3); scanf("%d",&n); scanf("%d%d",&x,&y); if(x>y){ k=x; x=y; y=k; } for(i=2;i<=n;i++) scanf("%d",&dis[i]); for(i=x+1;i<=y;i++) T[i]=INF; for(i=x;i<=y;i++) { for(j=i+1;j<=y;j++) { if(dis[j]-dis[i]<=l1) { if(T[j]>T[i]+c1) T[j]=T[i]+c1; } else break; } for(;j<=y;j++) { if(dis[j]-dis[i]<=l2) { if(T[j]>T[i]+c2) T[j]=T[i]+c2; } else break; } for(;j<=y;j++) { if(dis[j]-dis[i]<=l3) { if(T[j]>T[i]+c3) T[j]=T[i]+c3; } else break; } } printf("%d/n",T[y]); return 0; }