首页 > 其他分享 >多路归并

多路归并

时间:2023-04-01 17:23:31浏览次数:26  
标签:tmp 归并 多路 int res second include spend

能解决什么问题

一般是给出 n 个递减的等差数列,要求对于所有等差数列中前 m 个大的数的和

[acwing]1262. 鱼塘钓鱼

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>

using namespace std;

typedef pair<int, int> PII;

const int N = 110;

int n;
int a[N], d[N], t[N]; // t[i] 表示从第 1 个池塘走到第 i 个池塘所需时间
int T;
int spend[N]; // spend[i] 表示在第 i 个池塘钓了多长时间
int res;

// 当前能钓得的鱼数
int get(int i)
{
    return max(0, a[i] - d[i] * spend[i]);
}

int solve(int n, int t)
{
    if (t <= 0) return 0;
    
    memset(spend, 0, sizeof(spend));
    
    int res = 0;
    priority_queue<PII> h;
    for (int i = 1; i <= n; i++) h.push({get(i), i});
    while (t-- > 0) {
        auto tmp = h.top();
        if (tmp.first == 0) break;
        h.pop();
        res += tmp.first;
        spend[tmp.second]++;
        h.push({get(tmp.second), tmp.second});
    }
    
    return res;
}

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    for (int i = 1; i <= n; i++) scanf("%d", &d[i]);
    for (int i = 2; i <= n; i++) {
        scanf("%d", &t[i]);
        t[i] += t[i - 1];
    }
    scanf("%d", &T);
    
    for (int i = 1; i <= n; i++) 
        res = max(res, solve(i, T - t[i]));
    
    printf("%d", res);
    
    return 0;
}

标签:tmp,归并,多路,int,res,second,include,spend
From: https://www.cnblogs.com/cong0221/p/17278956.html

相关文章

  • 有关归并排序-Java实现
    有关归并排序:其中的分治思想很值得参考:1/**2*归并排序块合并3*@paramnum目标的排序数组4*@paramleftIndex传入的分治块的做左端索引5*@parammid中间索引6*@paramrightIndex传入的分治块的做右端索引7*@param......
  • go语言学习-slect多路复用和锁
    select在某些场景下我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。Go内置了select关键字,可以同时响应多个通道的操作。select的使用......
  • IO多路复用形象举例
    IO多路复用的形象举例IO多路复用意义接着上面的例子,IO多路复用的作用就是为了管理这些服务员,以便于提供点菜的服务方法1:select‘找一个人专门去咨询,拿着三个本......
  • 【算法】排序-归并排序 (java实现)
     packagecom.billkang.algorithm.sort;importjava.util.Arrays;/***归并排序*@authorKangbin*@date2018-11-28*/publicclassMergeSort{publi......
  • 归并排序——C语言描述
    归并排序——C语言描述目录归并排序——C语言描述0测试用例框架1定义(1)算法思想:(2)时间复杂度:(3)空间复杂度:(4)稳定的排序:2代码4测试用例0测试用例框架https://blog.csdn.......
  • tcp网络编程4—并发的io多路复用实现(select)
    原型:intselect(intmaxfdp1,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout)功能:委托内核检查描述符集是否准备好(即可以......
  • tcp网络编程4—并发的io多路复用实现(fcntl非阻塞)
    fcnt_vector_fd.h#ifndef_FCNTL_VECTOR_FD_H#define_FCNTL_VECTOR_FD_Htypedefstruct{int*fd;intconter;intmax_conter;}VectorFd;extern......
  • Redis_IO多路复用底层原理
    从底层了解IO多路复用模型前言当我们去面试的时候,问到了redis,nginx,netty他们的底层模型分别是什么?redis->epollnginx->epollnetty->epoll?需要从操作系统的层......
  • Servlet多路径映射使用场景
    <servlet><servlet-name>ServletDemo</servlet-name><servlet-class>www.hw.web.ServletDemo</servlet-class></servlet><servlet-m......
  • PAT Basic 1035. 插入与归并
    PATBasic1035.插入与归并1.题目描述:根据维基百科的定义:插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插......