1 条题解

  • 0
    @ 2025-5-8 15:50:34

    一维dp

    #include <cstdio>
    #include <iostream>
    using namespace std;
    const int INF = 0x3f3f3f3f;
    int w[1005], v[1005], sum[1005];
    double dp[1005];
    
    int main() {
        int b, l, n;
        while (cin >> b >> l >> n, b || l || n) {
            for (int i = 1; i <= n; i++) dp[i] = INF;
            for (int i = 1; i <= n; i++) {
                cin >> w[i] >> v[i];
                sum[i] = sum[i - 1] + w[i];
            }
            dp[1] = (double)l / v[1];
            for (int i = 2; i <= n; i++) {
                int minn = v[i];
                for (int j = i; j >= 1; j--) {
                    if (sum[i] - sum[j - 1] > b) continue;
                    minn = min(minn, v[j]);
                    dp[i] = min(dp[i], dp[j - 1] + (double)l / minn);
                }
            }
            printf("%.1f\n", dp[n] * 60);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    858
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    5
    已通过
    1
    上传者