本文已收录于专栏?《Java入门一百例》?学习指引序、专栏前言一、网格模型二、【例题1】1、题目描述2、解题思路3、模板代码4、代码解析5.原题链接三、【例题2】1、题目描述2、解题思路3、模板代码4、代码解析5.原题链接三、推荐专栏四、课后习题序、专栏前言 本专栏开启,目的在于帮助大家更好的掌握学习Java,特别是一些Java学习者
蓝桥舞会题目描述蓝桥公司一共有n名员工,编号分别为1~n。他们之间的关系就像一棵以董事长为根的树,父节点就是子节点的直接上司。每个员工有一个快乐指数aj。现蓝桥董事会决定举办一场蓝桥舞会来让员工们在工作之余享受美好时光,不过对于每个员工,他们都不愿意与自己的直接上司一起参会。董事会希望舞会的所有参会员工的快乐指数总和最大,请你求出这个最大值。输入描述输入的第一行是一个整数n,表示蓝桥公司的员工数。第二行包含n个整数,分别表示第i个员工的快乐指数ai。接下来n-1行每行包含两个整数u,v,表示v是u的直接上司。1≤u,v,ai≤n≤10⁵输出描述输出一个整数,表示答案。输入输出样例示例1输入3
前言 hello小伙伴们,最近由于个人放假原因颓废了一段时间很长时间没有更新CSDN的内容了,唉,毕竟懂得都懂寒暑假静下心来学习的难度远比在学校里大的多。 但是,也不是毫无办法克服,今天我来了我们当地的一家自习室来学习,感觉效果比在家强很多,趁机写一下博客分享一下最近的收获。 今天没写蓝桥杯备赛系列因为我感觉这块内容应该是蓝桥杯的一个重点考察方向,所以我想先讲知识点然后过渡讲蓝桥杯系列,包括dfs、bfs那块内容也是这个套路,尽量是能让我和大家收获最大为好。不多bb上内容。
DP定义:动态规划是分治思想的延伸,通俗一点来说就是大事化小,小事化无的艺术在将大问题化解为小问题的分治过程中,保存对着些小问题已经处理好的结果,并供后面处理更大规模的问题时直接使用这些结果动态规划具备了以下三个特点1.把原来的问题分解成了几个相似的子问题2.所有的子问题都只需解决一次3.存储子问题的解动态规划的本质,是对问题状态的定义和状态转移方程的定义(状态以及状态之间的递推关系)动态规划问题一般从以下四个角度考虑:1.状态定义2.状态间的转移方程定义3.状态的初始化4.返回结果状态定义的要求:定义的状态一定要形成递推关系适用场景:最大值/最小值,可不可行,是不是,方案个数下面根据一些例题
1.常规dp1.1爬楼梯1.1.1爬楼梯 由于求的是组合数,我们将不同路径相加即可dp定义:dp[i]为爬到第i阶楼梯的方法数;转移方程:dp[i]=dp[i-2]+dp[i-1];初始化: 由于涉及到i-2和i-1,那么我们要从i=2开始遍历,因此要初始化dp[0]=0,dp[1]=1(根据定义)遍历顺序:从左往右 完整代码:classSolution{public:intclimbStairs(intn){vectordp(n+1,0);dp[0]=0;dp[1]=1;if(n==1)return1;dp[2]=2;for(inti=3;i 1.1.2 使用最小花费爬楼梯 此题和上一题非常
二进制枚举子集a&1==1判断是否为奇数,如果为1,则为奇数因为奇数二进制末位一定是1,所以与1得到的结果是1例这里,114——第15位是1,可以表示14个1i&(1状态压缩旅行商问题FloydFloydFloyd算法:方格取数问题now∣flag==flagnow|flag==flagnow∣flag==flag——(1代表可以选择,0代表不可以选择):101101011010110001100011000110=10110==flag=10110==flag=10110==flag101101011010110010010100101001=11111!=flag=11111!=flag=
动态规划简单的来说:利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。一、定义:动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。基本思想与策略编辑:由于动态规划解决的问题多数有重叠
前言整体评价这场比赛很特别,是牛客周赛的第20场,后两题难度直线飙升了。前四题相对简单,E题是道状压题,历来状压题都难,F题压轴难题了,感觉学到了不少。A.赝品先求的最大值然后统计非最大值的个数,即可。importjava.io.*;importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(newBufferedInputStream(System.in));intn=sc.nextInt();int[]arr=newint[n];for(inti=0;in;i++){ar
RAPTOR:递归摘要与树形检索的结合,提升RAG检索性能来源:ICLR'24https://arxiv.org/pdf/2401.18059.pdf随着LLM技术的发展,RAG的价值也来越明显,可以视作LLM应用、落地的一个主要方向。RAG通过结合检索系统和生成模型,在生成回答时先从外部知识库种检索相关信息,辅助LLM进行更准确的生成。知识的粒度是多样的、零散的。如何从知识库中精准地检索到相关的知识片段是一个极具挑战性地问题。概述在目前构建RAG系统的流程中,基本都会涉及到对文档进行分块(有没有不需要进行分块的方法呢?)。现行的方式主要是通过滑动窗口进行分块,调一调分块的大小等。私以为,如何
题目 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。输入格式共一行,输入导弹依次飞来的高度。输出格式第一行包含一个整数,表示最多能拦截的导弹数。第二行包含一个整数,表示要拦截所有导弹最少要配备的系统数