• [CF19B] Checkout Assistant


    [CF19B] Checkout Assistant - dp

    Description

    有 n 件商品,每件有价格 ci 和扫描时间 ti。当正在扫描时,可以花费 1 秒偷走一件。求最少付钱数。扫描商品顺序任意。

    Solution

    所谓完成,就是当前已有的商品件数不小于 n

    对于 ci,ti,我们相当于在增加 ti+1 件商品的同时,花费了 ci 的代价

    现在问题就是凑到 n 件商品怎么使得代价最小,即一个 01 背包

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 4005;
    
    int n, t[N], c[N], f[N];
    
    signed main()
    {
        ios::sync_with_stdio(false);
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> t[i] >> c[i], ++t[i];
        memset(f, 0x3f, sizeof f);
        f[0] = 0;
        for (int i = 1; i <= n; i++)
            for (int j = N - 1; j >= t[i]; j--)
                f[j] = min(f[j], f[j - t[i]] + c[i]);
        int ans = f[n];
        for (int i = n; i < N; i++)
            ans = min(ans, f[i]);
        cout << ans << endl;
    }
    
  • 相关阅读:
    Linux网络编程--socket
    UDP学习总结
    TCP协议学习总结
    DNS协议总结
    DHCP协议总结
    ARP协议总结
    二层协议--MPLS协议总结
    二层协议--LLDP协议总结
    二层协议--LACP协议总结
    二层协议--STP协议总结
  • 原文地址:https://www.cnblogs.com/mollnn/p/14411700.html
Copyright © 2020-2023  润新知