sicily 1264 Atomic Car Race[Special judge]

计算第n个站时,到第1~n-1个站的时间已经计算好且为最小,故只需要计算在第i个站换tire然后再开到第n个站的时间,取最小。

#include <iostream> #include <cstdio> using namespace std; double ans[110]; //到达各站的最短时间 double times[10010]; //走x米的时间,各个参数相同,可用同一个表示 int a[110]; double b, v, e, f; int n, r; //计算注意从x走到x + 1,需要用x来表示距离而不是x + 1 void _cal() { times[0] = 0.0; for(int x = 0; x <= a[n - 1]; x++) { if(x >= r) times[x + 1] = times[x] + 1 / (v - e * (x - r)); else times[x + 1] = times[x] + 1 / (v - f * (r - x)); } } int main() { //freopen("1.txt", "r", stdin); while(cin >> n && n != 0) { for(int i = 0; i < n; i++) cin >> a[i]; cin >> b >> r >> v >> e >> f; _cal(); for(int i = 0; i < n; i++) { ans[i] = times[a[i]]; for(int j = 0; j < i; j++) { ans[i] = min(ans[i], ans[j] + times[a[i] - a[j]] + b); } } printf("%.4lf/n", ans[n - 1]); } return 0; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值