我的也是90分,不过也不知道为什么是错的……
```c++
#include <cstdio>
#include <algorithm>
using namespace std;
long long W,L,i,j,n,v,s,w[1005];
double t[1005],dp[1005],T;
int main(){
scanf("%lld%lld%lld",&W,&L,&n);
for (i=1; i<=n; i++) t[i]=(double)L/(scanf("%lld%lld",&w[i],&v),v),dp[i]=2147483647;
for (i=1; i<=n; i++)
for (j=i,s=w[i],T=t[i]; j && s<=W; j--,s+=w[j],T=max(T,t[j]))
dp[i]=min(dp[i],dp[j-1]+T);
printf("%.1f",dp[n]*60);
}
```
by piggy @ 2017-07-30 10:11:28
诶亚,程序帖炸了,再发一次吧
```cpp
#include <cstdio>
#include <algorithm>
using namespace std;
long long W,L,i,j,n,v,s,w[1005];
double t[1005],dp[1005],T;
int main(){
scanf("%lld%lld%lld",&W,&L,&n);
for (i=1; i<=n; i++) t[i]=(double)L/(scanf("%lld%lld",&w[i],&v),v),dp[i]=2147483647;
for (i=1; i<=n; i++)
for (j=i,s=w[i],T=t[i]; j && s<=W; j--,s+=w[j],T=max(T,t[j]))
dp[i]=min(dp[i],dp[j-1]+T);
printf("%.1f",dp[n]*60);
}
```
by piggy @ 2017-07-30 10:13:45
诶亚,过了,结果是初值不够大,你把你的 0x7ffffff 改成 9223372036854775807ll 即可(这个数最好背下来:))
```cpp
#include<cstdio>
#include<cstring>
double m,l,n,dp[1001],a[1001],b[1001];
int main()
{
scanf("%lf%lf%lf",&m,&l,&n);
for (int i=1;i<=n;++i) scanf("%lf%lf",&a[i],&b[i]);
for (int i=1;i<=n;++i)
{
double sm=a[i],mx=l*1.0/b[i];dp[i]=9223372036854775807ll;
for (int j=i-1;j>=0&&sm<=m;--j)
{
if (dp[j]+mx<dp[i]) dp[i]=dp[j]+mx;
sm+=a[j];if (mx<l*1.0/b[j]) mx=l*1.0/b[j];
}
}
printf("%.1lf\n",dp[(int)n]*60);
}
```
by piggy @ 2017-07-30 10:21:15
```cpp
#include <iostream>
#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
double f[1000];
long long m,l,n;
struct car
{
long long w,s;
double t;
}a[10001];
int main()
{ long long sum=0;
double sum1=0.0;
cin>>m>>l>>n;
for(i=1;i<=n;i++){
cin>>a[i].w>>a[i].s;
a[i].t=(double)l/a[i].s;
}
for(i=1;i<=n;i++)
f[i]=0x7fffffff;
for(i=1;i<=n;i++)
{
for(j=1;j<i;j++)
{
sum+=a[i-j+1].w;
if(sum>m) break;
if(sum1<a[i-j+1].s){
sum1=a[i-j+1].s;
}
f[i]=max(f[i],f[i-j]+sum1);
}
sum=0;
sum1=0.0;
}
printf("%.1lf\n",f[n]*60);
return 0;
}
这个是对的,不知道怎么对的,一遍就过了。。。。。。
```
by zxj200408 @ 2017-08-24 10:57:09