首页 > 其他分享 >六 1262. 鱼塘钓鱼 (多路归并)

六 1262. 鱼塘钓鱼 (多路归并)

时间:2024-03-25 20:56:45浏览次数:24  
标签:归并 多路 int 1262 private static 鱼塘

1262. 鱼塘钓鱼 (多路归并)
image

思路:遍历最远到的鱼塘,同时将截止时间减去路上花的时间,然后多路归并,不考虑具体钓鱼的顺序,每次都调最多的鱼。

import java.util.*;

public class Main {
    private static int[] a;
    private static int[] b;
    private static int[] c;
    private static int[] d;
    
    private static int get(int k) {
        return Math.max(0, a[k] - b[k] * d[k]);
    }
    
    private static int work(int n, int T) {
        int res = 0;
        d = new int[n + 1];
        for (int i = 0; i < T; i++) {
            int t = 1;
            for (int j = 2; j <= n; j++) {
                if (get(t) < get(j)) {
                    t = j;
                }
            }
            res += get(t);
            d[t]++;
        }
        return res;
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        a = new int[n + 1];
        b = new int[n + 1];
        c = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            a[i] = sc.nextInt();
        }
        for (int i = 1; i <= n; i++) {
            b[i] = sc.nextInt();
        }
        for (int i = 2; i <= n; i++) {
            c[i] = sc.nextInt();
            c[i] += c[i - 1];
        }
        int T = sc.nextInt();
        
        int res = 0;
        for (int i = 1; i <= n; i++) {
            res = Math.max(res, work(i, T - c[i]));
        }
        System.out.println(res);
    }
}

标签:归并,多路,int,1262,private,static,鱼塘
From: https://www.cnblogs.com/he0707/p/18095311/lanqiaobei06

相关文章

  • 五 505. 火柴排队 (归并排序|离散化)
    五505.火柴排队(归并排序|离散化)思路:先将两组数组按(2314->2013;3214->2103)规则排序,然后使用c数组建立双方的映射,从c[ai[i]]=bi[i],接着就是使用归并排序求c数组的逆序对即交换次数。importjava.util.*;publicclassMain{privatestaticint......
  • 【数据结构】归并排序(用递归)
    大家好,我是苏貝,本篇博客带大家了解归并排序,如果你觉得我写的还不错的话,可以给我一个赞......
  • 模版题——多路归并
    题目:https://www.acwing.com/problem/content/1264/这个题目主要考的是多路归并的思想和两步贪心1.第一步贪心,我们不会出现反复横跳的情况2.第二部贪心,对于我们能到达的前n个鱼塘,我们在这剩余的t时间,要钓到的肯定是前t个最大的,这就涉及到了多路归并问题。#include<bits/st......
  • leetcode148. 排序链表-归并法
    148.排序链表题干给你链表的头结点head,请将其按升序排列并返回排序后的链表。示例1:输入:head=[4,2,1,3]输出:[1,2,3,4]示例2:输入:head=[-1,5,3,4,0]输出:[-1,0,3,4,5]示例3:输入:head=[]输出:[]提示:链表中节点的数目在范围[0,5*104]内-105<=N......
  • 归并排序算法 java实现
    publicstaticvoidmain(String[]args){int[]arr={9,5,7,3,1,6,8,4,2};mergeSort(arr,0,arr.length-1);}/***归并排序*注意:归并的拆分数组和合并数组是从左到右依次进行的,网上很多文章都是错误的*并不是左右一起拆分,网上很多文章都是这样的......
  • 【算法】多路归并(鱼塘钓鱼)
    有 N 个鱼塘排成一排,每个鱼塘中有一定数量的鱼,例如:N=5 时,如下表:鱼塘编号12345第1分钟能钓到的鱼的数量(1..1000)101420169每钓鱼1分钟钓鱼数的减少量(1..100)24653当前鱼塘到下一个相邻鱼塘需要的时间(单位:分钟)3544即:在第 11 个鱼塘中钓鱼第 11 分钟内可钓到 1010 条鱼,......
  • 蓝桥杯算法集训 - Week 2:双指针、归并排序、多路归并
    蓝桥杯算法集训-Week2本系列随笔用于整理AcWing题单——《蓝桥杯集训·每日一题2024》的系列题型及其对应的算法模板。一、双指针Ⅰ、代码模板常见问题分类:(1)对于一个序列,用两个指针维护一段区间(2)对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作f......
  • 归并排序、快速排序——左神数据结构与算法Day2学习笔记C++版本(持续更新)
    递归行为        利用递归求整个数组的最大值,代码如下。intfind_Max(inta[],intL,intR){if(L==R){returna[L];}intmid=L+((R-L)>>1);//mid是数组的中点intleftMax=find_Max(a,L,mid);intrightMax......
  • 外部排序中多路归并排序,采用败者树比胜者树更优的原因和简易证明
    外部排序中多路归并排序,采用败者树较优的原因在外部排序中,多路归并排序采用败者树的优点主要有以下原因:多路归并排序过程多路归并是指对\(r\)个初始归并段,做\(k\)路平衡归并过程如下:每趟归并时,对\(k\)个已有序归并段进行归并第\(i\)个归并段最小值为\(X_i\),每次取\(X_j=\mi......
  • 力扣148排序链表--复习归并和快速排序
    递归的归并排序归并排序主要流程是拆分--排序--合并--排序--合并//拆分voidmergeSort(vector<int>&nums,intstart,intend){ if(start>=end)return; intmid=start+(end-start)/2; mergeSort(nums,start,mid); mergeSort(nums,mid+1,end); //最后一层排......