自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 承压计算

X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。 每块金属原料的外形、尺寸完全一致,但重量不同。 金属材料被严格地堆放成金字塔形。 7 5 8 7 8 8 9 2 7 2 8 1 4 9 1 8 1 8 8 4 1 7 9 6 1 4 5 4 5 6 5 5 6 9 5 6 5 5 4 7 9 3 5 5 1 7 5 7 9 7 4 7 3 3 1 4 6 4 5 5 8 8 3 2 4 3 1 1 3 3 1 6 6 5 5 4 4 2 9 9 9 2 1 9 1 9 2 9 5 7 9 4 3 3

2021-01-21 21:21:25 93

原创 最短Hamilton路径

题目描述 给定一张 nn 个点的带权无向图,点从 0∼n−10∼n−1 标号,求起点 00 到终点 n−1n−1 的最短 HamiltonHamilton 路径。 HamiltonHamilton 路径的定义是从 00 到 n−1n−1 不重不漏地经过每个点恰好一次。 输入格式 第一行输入整数 nn。 接下来 nn 行每行 nn 个整数,其中第 ii 行第 jj 个整数表示点 ii 到 jj 的距离(记为 a[i,j]a[i,j])。 对于任意的 x,y,zx,y,z,数据保证 a[x,x]=0a[x,x]

2021-01-17 23:22:48 132

原创 计数问题

题目描述 给定两个整数 a 和 b,求 a 和 b 之间的所有数字中0~9的出现次数。 例如,a=1024,b=1032,则 a 和 b 之间共有9个数如下: 1024 1025 1026 1027 1028 1029 1030 1031 1032 其中‘0’出现10次,‘1’出现10次,‘2’出现7次,‘3’出现3次等等… 输入样例 1 10 44 497 346 542 1199 1748 1496 1403 1004 503 1714 190 1317 854 1976 494 1001 1960 0

2021-01-16 22:28:23 146

原创 石子合并

设有N堆石子排成一排,其编号为1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。 例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,代价为9,得到9 2 ,再合并得到11,总代价为4+9+11=24; 如果第二步是先合并2,3堆,则代价为7,得到4 7,

2021-01-15 22:16:27 83

原创 最长上升子序列

给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数N。 第二行包含N个整数,表示完整序列。 输出格式 输出一个整数,表示最大长度。 数据范围 1≤N≤1000, −109≤数列中的数≤109 输入样例: 7 3 1 2 1 8 5 6 输出样例: 4 算法1 (动态规划) O(n2)O(n2) 状态表示:f[i]表示从第一个数字开始算,以w[i]结尾的最大的上升序列。(以w[i]结尾的所有上升序列中属性为最大值的那一个) 状态计算(集合划分):j∈(0,1,2,…

2021-01-14 22:12:04 159

原创 背包问题

背包问题是DP动态规划算法中比较经典的一类模型,在NOIP考场上不定期地上位,令人琢磨不透,但是一旦学会了他,你就可以在短短十分钟的时间里,切掉他,达到节约时间,而且一次AC的目的. 01背包:对于物品而言只能选择1个或者0个两种情况 滚动数组 完全背包:对于物品而言可以无限制选取,也可以不选 滚动数组 多重背包:对于物品而言最多能够选择从s[i]个,同样也可不选 滚动数组 分组背包:一些物品捆绑在一起,每一组物品中只能选择其中的一个物品 滚动数组 混合背包:有些物品可以选择1,有些物品可以选择无数个,有些

2021-01-13 21:20:26 227

原创 二进制中1的个数

给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。 输入格式 第一行包含整数n。 第二行包含n个整数,表示整个数列。 输出格式 共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。 数据范围 1≤n≤100000, 0≤数列中元素的值≤109 输入样例: 5 1 2 3 4 5 输出样例: 1 1 2 1 2 算法一 lowbit 使用lowbit操作,进行,每次lowbit操作截取一个数字最后一个1后面的所有位,每次减去lowbit得到的数字,直到数字

2021-01-12 22:19:55 112

原创 合并果子

在一个果园里,达达已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。 达达决定把所有的果子合成一堆。 每一次合并,达达可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。 可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。 达达在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以达达在合并果子时要尽可能地节省体力。 假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使达达耗费的体力最少,并输出这个

2021-01-11 22:31:25 113 1

原创 区间选点

给定N个闭区间[ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数N,表示区间数。 接下来N行,每行包含两个整数ai,bi,表示一个区间的两个端点。 输出格式 输出一个整数,表示所需的点的最小数量。 数据范围 1≤N≤105, −109≤ai≤bi≤109 输入样例: 3 -1 1 2 4 3 5 输出样例: 2 思路: 1.将每个区间按照右端点从小到大进行排序 2.从前往后枚举区间,end值初

2021-01-10 21:50:58 127

原创 逆序对的数量

给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数n,表示数列的长度。 第二行包含 n 个整数,表示整个数列。 输出格式 输出一个整数,表示逆序对的个数。 数据范围 1≤n≤100000 输入样例: 6 2 3 4 5 6 1 输出样例: 5 思路: 我们将序列从中间分开,将逆序对分成三类: 两个元素都在左边; 两个元素都在右边

2021-01-09 21:59:33 162

原创 排序(一)

**分类: 算法复杂度: 1.冒泡排序·: 从左边开始遍历,两个数作比较,左边比右边大,就做交换,一趟之后最大的数就放到最后面了,剩下的数继续做冒泡排序。 第一次冒泡: 冒泡排序整个过程 #include<iostream> using namespace std; void buttle(int a[], int n){ for(int i = 0; i < n-1; i++) { if(a[i] > a[i+1]) swap(a[i],a[i+1]);

2021-01-08 22:16:48 72

原创 最佳牛围栏

题目描述 农夫约翰的农场由 NN 块田地组成,每块地里都有一定数量的牛,其数量不会少于11头,也不会超过20002000头。 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。 围起区域内至少需要包含 FF 块地,其中 FF 会在输入中给出。 在给定条件下,计算围起区域内每块地包含的牛的数量的平均值可能的最大值是多少。 输入格式 第一行输入整数 NN 和 FF ,数据间用空格隔开。 接下来 NN 行,每行输出一个整数,第i+1i+1行输出的整数代表,第i片区域

2021-01-07 16:34:14 247

原创 数组中数值和下标相等的元素

假设一个单调递增的数组里的每个元素都是整数并且是唯一的。 请编程实现一个函数找出数组中任意一个数值等于其下标的元素。 例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等。 样例 输入:[-3, -1, 1, 3, 5] 输出:3 注意:如果不存在,则返回-1。 先判断是否有单调性,有单调性可用二分。 数字和下标相同也就是nums[i] - i = 0 1.如果nums[mid] - mid >= 0, 那么等于零的一定在mid左边,所以区间更新为[l,mid] 2.如果nums[m

2021-01-06 20:19:18 259

原创 数的三次方根

给定一个浮点数n,求它的三次方根。 输入格式 共一行,包含一个浮点数n。 输出格式 共一行,包含一个浮点数,表示问题的解。 注意,结果保留6位小数。 数据范围 −10000≤n≤10000 输入样例: 1000.00 输出样例: 10.000000 二分法 #include<iostream> using namespace std; int main() { double n; cin >> n; double l = -10000, r = 10000;

2021-01-06 19:59:54 186 1

原创 二分查找

何时用? 如果一个区间具有单调性质,那么一定可以二分,但是如果说这道题目没有单调性质,而是具有某种区间性质的话,我们同样可以使用二分,二分的题目,往往会出现最大值最小值,或者单调性质 。 方法: 1.先写一个check函数 2.判定在check的情况下(true和false的情况下),如何更新区间。 3.在check(m)==true的分支下是: l=mid的情况,中间点的更新方式是m=(l+r+1)/2 r=mid的情况,中间点的更新方式是m=(l+r)/2 模板: bool check(int x) {

2021-01-06 18:37:56 67

原创 最高的牛

有 N 头牛站成一行,被编队为1、2、3…N,每头牛的身高都为整数。 当且仅当两头牛中间的牛身高都比它们矮时,两头牛方可看到对方。 现在,我们只知道其中最高的牛是第 P 头,它的身高是 H ,剩余牛的身高未知。 但是,我们还知道这群牛之中存在着 M 对关系,每对关系都指明了某两头牛 A 和 B 可以相互看见。 求每头牛的身高的最大可能值是多少。 输入格式 第一行输入整数N,P,H,M,数据用空格隔开。 接下来M行,每行输出两个整数 A 和 B ,代表牛 A 和牛 B 可以相互看见,数据用空格隔开。 输出格式

2021-01-05 22:18:27 112

原创 增减序列

给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。 求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。 输入格式 第一行输入正整数n。 接下来n行,每行输入一个整数,第i+1行的整数代表ai。 输出格式 第一行输出最少操作次数。 第二行输出最终能得到多少种结果。 数据范围 0<n≤105, 0≤ai<2147483648 输入样例: 4 1 1 2 2 输出样例: 1

2021-01-05 21:21:50 205

原创 激光炸弹

激光炸弹 地图上有 N 个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi。 注意:不同目标可能在同一位置。 现在有一种新型的激光炸弹,可以摧毁一个包含 R×R 个位置的正方形内的所有目标。 激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个正方形的边必须和x,y轴平行。 求一颗炸弹最多能炸掉地图上总价值为多少的目标。 输入格式 第一行输入正整数 N 和 R ,分别代表地图上的目标数目和正方形的边长,数据用空格隔开。 接下来N行,每行输入一组数据,每组数据包括三个整

2021-01-05 18:09:43 85

原创 前缀和与差分

前缀和(一维) 输入一个长度为n的整数序列。 接下来再输入m个询问,每个询问输入一对l, r。 对于每个询问,输出原序列中从第l个数到第r个数的和。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数,表示整数数列。 接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。 输出格式 共m行,每行输出一个询问的结果。 数据范围 1≤l≤r≤n, 1≤n,m≤100000, ?1000≤数列中元素的值≤1000 输入样例: 5 3 2 1 3 6 4 1 2 1 3 2 4 输出样例: 3 6 10

2021-01-04 21:04:27 222

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除