90分求救

P1594 护卫队

我的也是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


|