1 solutions
-
0
C++ :
#include<iostream> #include<cstdlib> #include<cstdio> using namespace std; double f[1001]; long long len,wei,n,w[1001],v[1001],sum[1001],vmin[1001][1001]; int main () { scanf ("%I64d%I64d%I64d",&wei,&len,&n); for (int b=1;b<=n;++b){scanf ("%I64d%I64d",&w[b],&v[b]);sum[b]=sum[b-1]+w[b];vmin[b][b]=v[b];} for (int b=1;b<n;++b)for (int c=b+1;c<=n;++c)vmin[b][c]=min(v[c],vmin[b][c-1]); for (int i=1;i<=n;++i) { f[i]=(double)len/v[i]+f[i-1]; for (int j=i-1;j>=1;--j) if (sum[i]-sum[j-1]<=wei)f[i]=min(f[i],f[j-1]+(double)len/vmin[j][i]); else break; } printf ("%.1lf",f[n]*60); return 0; }Pascal :
var max,len,n:int64; i,j:longint; w,v,f:array[0..1000]of extended; minv,t:extended; begin read(max,len,n); for i:=1 to n do read(w[i],v[i]); f[0]:=0; f[1]:=len/v[1]; for i:=2 to n do begin f[i]:=1e24; minv:=1e24; t:=0; for j:=i downto 1 do begin t:=t+w[j]; if v[j]<minv then minv:=v[j]; if t>max then break; if minv<>0 then if f[j-1]+len/minv<f[i] then f[i]:=f[j-1]+len/minv; end; end; writeln(f[n]*60:0:1); end.
- 1
Information
- ID
- 18455
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By