24h購物| | PChome| 登入
2013-09-11 07:10:16| 人氣720| 回應0 | 上一篇 | 下一篇

[UVA][dp] 1211 - Atomic Car Race

推薦 0 收藏 0 轉貼0 訂閱站台

In the year 2020, a race of atomically energized cars will b e held. Unlike today's car races, fueling is not a concern of racing teams. Cars can run throughout the course without any refueling. Instead, the critical factor is tire (tyre). Teams should carefully plan where to change tires of their cars.

The race is a road race having n checkpoints in the course. Their distances from the start are a1, a2, ... , and an (in kilometers). The n -th checkpoint is the goal. At the i -th checkpoint (i < n ), tires of a car can be changed. Of course, a team can choose whether to change or not to change tires at each checkpoint. It takes b seconds to change tires (including overhead for braking and accelerating). There is no time loss at a checkpoint if a team chooses not to change tires.

A car cannot run fast for a while after a tire change, because the temperature of tires is lower than the designed optimum. After running long without any tire changes, on the other hand, a car cannot run fast because worn tires cannot grip the road surface well. The time to run an interval of one kilometer from x to x + 1 is given by the following expression (in seconds). Here x is a nonnegative integer denoting the distance (in kilometers) from the latest checkpoint where tires are changed (or the start). r , v , e and f are given constants.


1/(v - e x (x - r))        (if x$ ge$r)

1/(v - f x (r - x))        (if x < r)


Your mission is to write a program to determine the best strategy of tire changes which minimizes the total time to the goal.

Input 

The input consists of multiple datasets each corresponding to a race situation. The format of a dataset is as follows.


n

a1 a2...an

b

r v e f

The meaning of each of the input items is given in the problem statement. If an input line contains two or more input items, they are separated by a space.


n is a p ositive integer not exceeding 100. Each of a1, a2, ... , and an is a positive integer satisfying 0 < a1 < a2 <...< an$ le$10000 . b is a positive decimal fraction not exceeding 100.0. r is a nonnegative integer satisfying 0$ le$r$ le$an - 1 . Each of v, e and f is a positive decimal fraction. You can assume that v - e x (an -1 - r)$ ge$0.01 and v - f x r$ ge$0.01 .

The end of the input is indicated by a line with a single zero.

Output 

For each dataset in the input, one line containing a decimal fraction should b e output. The decimal fraction should give the elapsed time at the goal (in seconds) when the best strategy is taken. An output line should not contain extra characters such as spaces.

The answer should not have an error greater than 0.001. You may output any number of digits after the decimal point, provided that the above accuracy condition is satisfied.

Sample Input 

2 
2 3 
1.0 
1 1.0 0.1 0.3 
5 
5 10 15 20 25 
0.15 
1 1.0 0.04 0.5 
10 
1783 3640 3991 4623 5465 5481 6369 6533 6865 8425 
4.172 
72 59.4705 0.0052834 0.0611224 
0

Sample Output 

3.5397 
31.9249 
168.6682

題目描述:

方程式賽車要跑完整個賽程,而每個輪胎都有其磨損產生的效應,題目給定每增加跑的單位 1,
則相對應時間需要多少的關係式,而如果中途換新的輪胎,則需要額外花 b 秒裝置。

問跑完全程的最少時間。

題目解法:
先將跑的距離所需要時間計算出來,之後窮舉每個新輪胎跑了多遠進行轉換。
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[105];
double dp[105];
double time[10005];
int main() {
    int n;
    int i, j, k;
    double b, r, v, e, f;
    while(scanf("%d", &n) == 1 && n) {
        dp[0] = 0, a[0] = 0;
        time[0] = 0;
        for(i = 1; i <= n; i++) {
            scanf("%d", &a[i]);
            dp[i] = 1e+30;
        }
        scanf("%lf", &b);
        scanf("%lf %lf %lf %lf", &r, &v, &e, &f);
        for(i = 1; i <= a[n]; i++) {
            if(i-1 < r)
                time[i] = time[i-1]+ 1.0/(v-f*(r-(i-1)));
            else
                time[i] = time[i-1]+ 1.0/(v-e*((i-1)-r));
        }
        for(i = 0; i <= n; i++) {
            for(j = i+1; j <= n; j++)
                dp[j] = min(dp[j], dp[i]+b+time[a[j]-a[i]]);
        }
        printf("%.4lf\n", dp[n]-b);
    }
    return 0;
}

台長: Morris
人氣(720) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 教育學習(進修、留學、學術研究、教育概況) | 個人分類: UVA |
此分類下一篇:[UVA] 10536 - Game of Euler
此分類上一篇:[UVA][dp] 1172 - The Bridges of Kolsberg

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文