社区讨论
80分求解
P1594护卫队参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lod1nxsu
- 此快照首次捕获于
- 2023/10/30 23:17 2 年前
- 此快照最后确认于
- 2023/11/05 09:36 2 年前
CPP
# include <iostream>
# include <cstdio>
# include <cmath>
# include <cstring>
# define ll long long
using namespace std;
ll W,L,n;
double ans=1324124123;
ll w[1010],sum[1010];
double v[1010],f[1010][15],dp[1010];
int main(){
scanf("%lld%lld%lld",&W,&L,&n);
for(ll i=0;i<=n;i++)
for(ll j=0;j<=11;j++)
f[i][j]=174817481;
for(ll i=1;i<=n;i++){
scanf("%lld%lf",&w[i],&v[i]);v[i]=double(v[i])/double(60);
//printf("%lf\n",v[i]);
f[i][0]=v[i],sum[i]=sum[i-1]+w[i];
}
ll p=log(n)/log(2);
for(ll i=1;i<=p;i++)
for(ll j=1;j+(1<<i)-1<=n;j++)
f[j][i]=min(f[j][i-1],f[j+(1<<(i-1))][i-1]);
for(ll i=0;i<=n;i++)
dp[i]=41241412;
dp[0]=0.0;
for(ll i=1;i<=n;i++)
for(ll l=0;l<i;l++){
if(sum[i]-sum[l]<=W){
ll e=log(i-l)/log(2);
double p=min(f[l+1][e],f[i-(1<<e)+1][e]);
double r=double(L)/double(p);
dp[i]=min(dp[l]+r,dp[i]);
//printf("%lf\n",r);
}
}
printf("%.1lf",dp[n]);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...