zoukankan      html  css  js  c++  java
  • G

    题目:题目链接

    题意:给出n种食物,食物有自己的价格并且可以自由搭配,每天吃之前没吃过的花费最少的搭配,问第k天的花费。

    思路:第k小我们考虑用优先队列处理,虽然n比较大,但由于1 ≤ K ≤ min(106, 2N - 1),只要我们控制好每次往队列里压的的元素个数,问题是可以解决的,控制方法见代码。

    AC代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <algorithm>
     6 #include <vector>
     7 #include <string>
     8 #include <set>
     9 #include <map>
    10 #include <list>
    11 #include <unordered_set>
    12 #include <unordered_map>
    13 #include <cmath>
    14 #include <queue>
    15 #include <stack>
    16 
    17 #define FRER() freopen("in.txt", "r", stdin)
    18 #define FREW() freopen("out.txt", "w", stdout)
    19 #define INF 0x3f3f3f3f
    20 
    21 using namespace std;
    22 
    23 const int maxn = 2e5 + 5;
    24 int n, k;
    25 
    26 long long num[maxn];
    27 
    28 typedef pair<long long, int> P;
    29 
    30 int main()
    31 {
    32     ios::sync_with_stdio(0);
    33     cin.tie(0);
    34 
    35     cin >> n >> k;
    36     for(int i = 0; i < n; ++i)
    37         cin >> num[i];
    38     sort(num, num + n);
    39 
    40     priority_queue<P, vector<P>, greater<P>> q;
    41 
    42     q.push(make_pair(num[0], 0));
    43     P tmp;
    44     for(int i = 1; !q.empty() && i < k; ++i) {
    45         tmp = q.top();
    46         q.pop();
    47 
    48         if(tmp.second < n - 1) {
    49             q.push(make_pair(tmp.first + num[tmp.second + 1], tmp.second + 1));
    50             q.push(make_pair(tmp.first - num[tmp.second] + num[tmp.second + 1], tmp.second + 1));
    51         }
    52     }
    53 
    54     cout << q.top().first << endl;
    55     return 0;
    56 }
  • 相关阅读:
    docker清理无用资源
    为什么不需要在 Docker 容器中运行 sshd
    转载:SQL注入演示demo
    docker方式安装prometheus主控
    promethus监控结构
    oracle的函数
    oracle冷备份后恢复
    oracle的冷备份
    oracle常用
    oracle的系统文件的查询
  • 原文地址:https://www.cnblogs.com/fan-jiaming/p/10290942.html
Copyright © 2011-2022 走看看