自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法分析与设计 实验12图的m着色问题

1、问题:图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。2、解析:3、设计(核心伪代码):bool judge(int x) //判断x结点染色方案是否正确{ for (int i = 1; i < x; i++) if (mp[i][x] && color[x] == color[i])//两结点相连,且颜色一样,则

2021-06-03 16:09:15 378

原创 算法分析与设计 实验11 最优前缀码

1、问题:2、解析:3、设计(核心伪代码):void CreateHuffmanTree(HuffmanTree T) {//构造哈夫曼树,T[m-1]为其根结点 int i, p1, p2; InitHuffmanTree(T); InputWeight(T); for (i = n; i < m; i++) { SelectMin(T, i - 1, &p1, &p2); T[p1].parent = T[

2021-05-31 08:40:36 187

原创 算法分析与设计 实验10 01背包问题

1、问题:2、解析:3、设计(核心伪代码):①、确认子问题和状态  01背包问题需要求解的就是,为了体积VVV的背包中物体总价值最大化,NNN件物品中第iii件应该放入背包中吗?(其中每个物品最多只能放一件)  为此,我们定义一个二维数组,其中每个元素代表一个状态,即前i个物体中若干个放入体积为VVV背包中最大价值。数组为:f[N][V]f[N][V]f[N][V],其中f[i][j]f[i][j]f[i][j]表示前i件中若干个物品放入体积为jjj的背包中的最大价值。②、初始状态  初始

2021-05-17 15:23:43 457

原创 算法分析与设计 实验9 LCS问题和背包问题

1、问题:LCS算法和背包算法,特别要求举例时采用不同于讲义的数据进行推导。2、解析:LCS算法:背包算法:设价格数组v = {8, 10, 6, 3, 7, 2};重量数组w = {4, 6, 2, 2, 5, 1}背包容量为12时对应的dp数组3、设计(核心伪代码):LCS: for(i=1;i<=lena;++i) { for(j=1;j<=lenb;++j) {

2021-05-10 16:30:25 243

原创 算法分析与设计 实验8 矩阵链乘法

1、问题:2、解析:举个例子:3、设计(核心伪代码): for (int i = 1; i <= mm; i++){ for (int j = 0; j <= money; j++){ F[i][j] = 0; m[i][j] = 0; for (int k = 0; k <= j; k++){ if (F[i][j] < f[i][k] + F

2021-04-29 21:39:46 170

原创 算法分析与设计 实验7 投资问题

1、问题:设m元钱,n项投资,函数fi(x)表示将x元投入第i项项目所产生的效益,i=1,2,…,n。问:如何分配这m元钱,使得投资的总效益最高?2、解析:1、问题分析假设分配给第i个项目的钱数是xi,问题描述为:目标函数:max{f1(x1)+ f2(x2)+…+ fn(xn)}约束条件:x1 +x2 +…+xn=m,xi∈N实例:这就是一个典型的背包问题2、问题拆解设Fk(x)表示x万元投给前k个项目的最大效益,k=1,2,…,n, x=1,2,…,m。设给第k个项目投资xk万

2021-04-25 23:41:57 840

原创 算法分析与设计 实验6 选第k小元素:特定分治策略

1、问题:设L是n个元素的集合,从L中选取第k小的元素,其中1<=k<=n。这里第k小的元素是指,当L按从小到大排好序之后,排在第k个位置的元素。利用特定分治策略选出第k小的元素。2、解析:3、设计(核心伪代码):void Closest_Pair(int left, int right, int flag) { //最近点对距离 先对x排序,flag表示禁用的点 if(left == right) return ; //只剩1个点 if(le

2021-04-19 16:16:59 209

原创 第18届浙江省程序设计省赛总结

也算是达到了赛前定的目标了,7题银牌滚了。这是我打的第三场正式比赛了,之前打了一场上海一场昆明,一铁一银。之前两场我好像对我们队都没啥帮助,今天总算是帮上点忙了。赛前很欢乐,一点都没有打区域赛前的紧张。比赛开始后,看到A很短我就直接去看了,发现是道水题就果断上机敲了,1A。然后队友又告诉我C的题意,就判断是否是一个立方体,因为平时计算几何都是我在写,这题想法也很明显,就是借用立方体的性质判断一下两点距离就结束了,26分钟1A。太怕自己打不好了,在判题时竟然一直喊“菩萨保佑菩萨保佑”,也是有点迷。然后铁

2021-04-17 23:51:09 752

原创 算法分析与设计 实验5 平面最近点对

1、问题:求平面中距离最近的两个点2、解析:可以通过枚举两两顶点来得到结果,但是时间复杂度来到了O(n2)O(n^2)O(n2),显然是很慢的,所以我们采用分治的策略来分析这个问题。这里的分治算法的主要思路是将平面上的n个点分为两个子集S1,S2。每个子集中有n/2个点,然后递归的在每个子集中求解最近点对。算法步骤:把所有的点按照横坐标排序将所有点分成左右两部分递归分别算出左右部分的最近点对,设为d1和d2求出一个点在左部分,一个点在右部分的最近点对,设为d3结果就是min(d1, d

2021-04-12 15:50:48 407

原创 杜教筛

杜教筛首先我们要知道杜教筛是用来求积性函数的前缀和的。前置知识1:积性函数若aaa和bbb互质,那么有f(ab)=f(a)f(b)f(ab) = f(a)f(b)f(ab)=f(a)f(b),则称f(x)f(x)f(x)为积性函数。若函数f(x)f(x)f(x),对于任意两个数aaa和bbb,都有f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b),则称f(x)f(x)f(x)为完全积性函数常见的积性函数欧拉函数φ(x)\varphi (x)φ(x) 比xxx小

2021-04-01 21:48:25 571

原创 算法分析与设计 实验4 二分归并排序

1、问题:对nnn个不同的数构成的数组A[1..n]A[1..n]A[1..n]进行排序,其中n=2kn=2^kn=2k2、解析:二分归并排序是经典的分治算法。算法的思路是将长度为n的数组不断划分成n2\frac{n}{2}2n​的子数组,即将nnn规模的问题转化成为了n2\frac{n}{2}2n​规模的子问题,不断划分,当问题规模为111时(长度为111的数组本身就是有序的),将每一个长度为111的子序列进行归并(归并有序表),不断归并就能够实现将长度为n2\frac{n}{2}2n​的有序表归并

2021-03-29 15:37:10 222

原创 2018 ACM-ICPC, Asia Shenyang Regional L. Machining Disc Rotors

传送门L. Machining Disc Rotors题意: 给出一个大圆,然后再给出若干个小圆,这些小圆切割了大圆,求被切割后的几何图形的直径。题解: 想法很简单,如果被切割后仍存在大圆直径,那么答案就是大圆直径,否则就是最远的两点距离。对于如何判断是否存在直径可以枚举每个端点,然后求它关于原点的对称点,如果不在任何一个圆内,那么直径存在。注意其他圆与大圆无交点时答案就是直径#include<bits/stdc++.h>using namespace std;#define l

2021-03-29 10:26:53 213 3

原创 2018 ACM-ICPC, Asia Shenyang Regional G. Best ACMer Solves the Hardest Problem

传送门G. Best ACMer Solves the Hardest Problem题意 给出二维平面上的nnn个点, 每个点都有权值www。然后给出mmm次操作,一共有四种操作:加入一个权值为www的新点、删除一个点、将到(x,y)(x,y)(x,y)点距离为k\sqrt{k}k​的点权值加www、求到(x,y)(x,y)(x,y)点距离为k\sqrt{k}k​的点的权值和,记录为lastanslastanslastans并且输出它。以后每次输入的x,yx,yx,y都要对lastanslastans

2021-03-29 10:25:28 111

原创 浙大城市学院第十八届程序设计竞赛 C - Set Up The Flag (折半搜索)

传送门题意: 给出一个7∗77 * 77∗7的矩阵,其中有999个格子有数字,在每个数字周围可以插旗子,要求每个数字周围的旗子数量等于这个数字,问方案数。思路: 我们如果暴力去枚举每个位置的状态的话,那么时间复杂度将来到O(240)O(2 ^ 40)O(240),所以不可取。我们考虑折半搜索,把404040个格子分成两个202020个,然后记录前202020个格子对前666个数字的贡献,在考虑后202020个格子对后666个数字的贡献。对于每次的输入,我们考虑在前半部分枚举中间三个数字的状态,然后在后

2021-03-22 16:19:34 147 1

原创 算法分析与设计 实验3 检索算法

1、问题:写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度结果即可。2、解析:第一种检索算法就是遍历一遍这个数组,如果x在T中就输出下标,不在T中就输出j第二种检索算法就是二分,这里我们可以用c++自带的lower_bound函数,去查找第一个大于等于出现x的位置的下标3、设计(核心伪代码):For(i : 1 ~ n) If( T[i] == x) ... Index

2021-03-22 15:40:23 232

原创 算法分析与设计 实验2-2 Dijkstra算法

1、问题:对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径。2、解析:算法思路:从已确定最短路径的节点Vi出发,找到其中权值最小的边,如果原点到Vi的权值和加Vi到Vj的权值小于已知原点到Vj的权值和,则将原点到Vi的权值和加Vi到Vj的权值作为原点到Vj的最小权和。可能不是很清楚,附上图解:3、设计(核心伪代码): d[s]=0; while(1){ int min1= inf , z = -1; for(int i=0;i<n;i++){

2021-03-15 16:38:51 200

原创 算法分析与设计 实验2-1Floyd算法

1、问题:用Floyd算法求解下图各个顶点的最短距离。2、解析:任意两点间的最小距离要么直接相连,要么通过另外一个点相连。用每个点去更新两两点之间的距离即可。Floyd优点是代码简单,能够求任意两点的最短路;缺点是暴力带来的时间复杂度较大,不适合用在点较多的图中。3、设计(核心伪代码):for(k : 1 ~ n){ for(i : 1 ~ n){ for(j : 1 ~ n){ e[i][j]=min(e[i][j],e[i][k]+e[k][j]); }

2021-03-15 16:35:21 146

原创 算法分析与设计 实验1-2Prim算法

1、问题:用Prim算法来构造最小生成树2、解析:Prim算法从任意一个顶点开始生成最小生成树,每次选择一个与当前小树最近的一个顶点,并将这个顶点加入到小树中。然后更新这棵小树到其他点的最近距离。附上图解:至此一棵最小生成树构造完成。3、设计(核心伪代码):For(i: 1 ~ n) { Minn = ∞; For(j: 1 ~ n) { If(!vis[j] && d[j] < minn) { Minn = d[j]; Index = j;

2021-03-08 17:11:50 143

原创 算法分析与设计 实验1-1Kruskal算法

1、问题:用Kruskal算法来实现最小生成树2、解析:Kruskal算法在找最小生成树结点之前,需要对边权重从小到大进行排序。将排序好的权重边依次加入到最小生成树中(如果加入时产生回路就跳过这条边,加入下一条边),当加入的边数为n - 1条后,就找到了这个连通图的最小生成树。对于如何判断有无回路产生,采用并查集来判断。附上选择边的过程:至此一棵最小生成树就构建完成了。3、设计(核心伪代码):Sort(E + 1, E + 1 + m);For(E : 1 ~ m) { If(find

2021-03-08 17:06:21 249

原创 Codeforces Round #697 (Div. 3)

目录A - Odd DivisorB - New Year's NumberC - Ball in BerlandD - Cleaning the PhoneE - Advertising AgencyF - Unusual MatrixG - Strange BeautyA - Odd Divisor题意: 问nnn是否有除了111以外的奇数因子思路: 每次除222,若出现奇数则输出YESYESYES,若除到111则输出NONONO。AC Code:#include<bits/stdc+

2021-01-27 23:39:44 109

原创 [kuangbin带你飞] 专题十三 基础计算几何 题解

这个专题除了最后两题其他题目都是几个月前写的了,所以就贴一下代码好了,就最后两题简单地说了一下思路目录A - TOYS (POJ - 2318)B - Toy Storage (POJ - 2398)C - Segments (POJ - 3304)D - Intersecting Lines (POJ 1269)E - The Doors (POJ - 1556)F - Pick-up sticks (POJ - 2653)G - Treasure Hunt (POJ - 1066)H - Inter

2021-01-27 17:12:59 221

原创 [kuangbin带你飞]专题八 生成树 题解

目录A - The Unique MST (POJ - 1679)B - Qin Shi Huang's National Road SystemA - The Unique MST (POJ - 1679)题意: 问最小生成树是不是唯一的,如果是则输出边权和,如果不是输出Not Unique!。思路: 首先生成一个最小生成树,然后每次删掉其中的一条边,再去生成最小生成树,如果能生成权值和与之前一样的,那说明最小生成树不唯一,否则唯一。AC Code:#include<cstdio>

2021-01-24 19:42:19 396

原创 牛客IOI周赛22-普及组

目录A - 战争尾声B - 签订协议C - 照看小猫D - 路线规划题面A - 战争尾声题意: 给出nnn个国家的坐标,如果在平面上能找到一点的到这nnn个国家的距离相等则输出这个坐标(优先输出xxx最小的,在输出yyy最小的)。思路: 刚开始一直在想怎么求一个点到平面上nnn个点的距离相等,后来仔细看了一下坐标的范围,才发现可以暴力枚举坐标,复杂度为O(2002n)O(200^2n)O(2002n)。AC Code:#include<bits/stdc++.h>using na

2021-01-23 12:02:41 160

原创 [kuangbin带你飞]专题六 最小生成树 题解

目录[A - Jungle Roads](https://vjudge.net/problem/POJ-1251)[B - Networking](https://vjudge.net/problem/POJ-1287#author=20175101008)[C - Building a Space Station](https://vjudge.net/problem/POJ-2031#author=0)A - Jungle Roads思路: 把字母转化为数字,然后再跑一遍最小生成树。AC Code

2021-01-21 19:58:52 386 1

原创 Codeforces Round #696 (Div. 2) (A ~ D)

Codeforces Round #696 (Div. 2)A. Puzzle From the Future题意: 二进制加法不进位,并且和的相邻项如果相同则只保留一项。给出一个二进制数a,要求找到一个b使它们的和最大。题解: 贪心去找,不能使项省略,对于a是0还是1分别考虑。代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1e2 + 10;int t, n;string st, st1;void

2021-01-20 20:43:07 157

原创 Codeforces Round #688 (Div. 2) B. Suffix Operations【思维】

B - Suffix Operations题意: 给出一个数组,刚开始可以选择其中一个数变成任意的数,然后只能对数组的后缀进行加1或者减1的操作,问最少经过多少次操作才能把数组中的所有元素都变成一样的。题解: 脑子不够用,这道题真的是想了很久了。先不考虑将数字进行变换,那么答案就很明显是一个差分数组的和,然后考虑变换。如果变换第一个数字,那么减少的操作次数就是abs(a[1]−a[2])abs(a[1] - a[2])abs(a[1]−a[2])如果变换最后一个数字,那么减少的操作次数就是abs(

2021-01-19 20:11:19 116

原创 2020ICPC上海区域赛总结

怎么说呢想过打铁但没想到真打铁了其实挺难受的开局十分钟我交了第一发签到题,由于特判没有return0return 0return0白给了一发,加上之后又马上冲了一发结果还是WA了,这时我就一直在默念完了完了,队友们估计都蒙了,上来签到题先WA两发,然后又检查了一遍自己的代码,发现有个括号没有加上,这时才AC了签到题,"贡献"了一小时罚时,这样的开局大概就已经奠定了结局吧。接下来铁子哥开了M,写了发字典树WA,我去开了D,感觉这是学军A题的hard版,我自认为考虑完全了要求上机,结果又WA,接着又是苏

2020-12-14 14:09:38 1413

原创 2016-2017 ACM-ICPC CHINA-Final - H.Great Cells【思维】

题面题意: 一个矩阵中的一个格子如果满足它严格大于它所在的行和列,那么我们称这个格子为great cell, AgA_{g}Ag​代表有g个 great cell 时的方案数。给出一个n行m列的矩阵和一个数k,k表示每个格子可以从[1,k]\left [1 ,k\right ][1,k]中选取一个数放进当前格子。要我们计算这个公式的结果 ∑g=0NM(g+1)⋅Agmod(109+7)\sum_{g=0}^{NM} (g + 1) · A_g mod (10^9 + 7)g=0∑NM​(g+1)⋅Ag

2020-12-01 16:32:10 252 1

原创 Java抽象类和接口

1.抽象类如果一个父类设计地十分抽象,以至于它都没有任何具体的实例,这样的类称为抽象类抽象类必须要用abstract修饰用abstract修饰的类叫做抽象类,此类不能有对象,换句话说就是此类不能使用new操作符创建它的实例用abstract修饰的方法叫做抽象方法,此方法不能有方法体,就是什么内容都不能有。类似于c语言中对函数的声明但不定义函数关于抽象类的几点说明在抽象类扩展的非抽象子类中,必须实现所有的抽象方法虽然抽象类不能使用new操作符来初始化,但是仍然可以定义它的构造方法,这个构造

2020-12-01 16:28:20 213

原创 2019 ICPC Asia Nanjing Regional K.Triangle

题面题意: 给出三角形的三个顶点和一条线段的一个端点,问是否存在另外一个点和之前的端点构成一条线段,满足落在三角形边上,并且把三角形分成面积相等的两部分,起始点也需要在三角形边上。题解: 赛后看了一下大家的bolg,基本上都是用二分写的,我觉得我的写法还挺好的。首先如果起始点不在三角形边上,直接输出 -1,如果起始点在边上,那么就一定能够找到另外一个点也在三角形边上把这个三角形分为面积相等的两部分,接下来我们就需要去找到这个点,这里我用到了高中时常用的求三角形面积公式S=12∗sin⁡θ∗a∗bS =

2020-11-23 00:19:47 232

原创 HDU - 3007【模拟退火求最小圆覆盖】

HDU - 3007 Buried memory代码:#include<bits/stdc++.h>using namespace std; #define inf 0x3f3f3f3f#define eps 1e-3const int maxn = 510;const double startT = 100;struct Point{ double x, y;}P[maxn];double Dist(Point a, Point b){ return sqrt(

2020-11-21 19:16:08 156

原创 Java 多态

1.多态概述1.面向对象程序设计的三大支柱是封装、继承和多态2.多态就是对同一个对象,在不同时刻表现出来的不同形态3.多态 现实意义 理解:电脑上的F1按键,当不打开任何文件点击F1显示的是系统的帮助文档,当打开word文档点击F1显示的是word文档的帮助,同一个按钮但是能实现不同的处理方式现实中同一个事物通常会出现多种形态,比如说我自己,我在本质上是一个人,在学校里我是一个学生,这就是一种多态。Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Per

2020-11-17 16:21:49 87

原创 2015 ACM/ICPC Asia Regional Changchun && HDU - 5531 Rebuild【数学 + 三分】

题意: 给出一系列点,这些点依次相连,最后一个点和第一个点相连,形成一个多边形。问以每个点为圆心画一个圆(半径可为0),是否存在当前的圆与相邻的两个圆都相外切,如果有,则找到使总面积最小的方案,如果没有则输出“IMPOSSIBLE”。题解 : 我们设圆的半径为r[1] 到 r[n], 设多边形的边长为d[1] 到 d[n]。于是就有 r[1] + r[2] = d[1] , r[2] + r[3] = d[2] ,r[3] + r[4] = d[3], r[n-1] + r[n] = d[n-1], r

2020-11-06 20:34:01 115

原创 POJ - 1410 Intersection 【计算几何】

Intersection题意: 给出一个矩形和一条线段,问是否存在交点。注意这里的矩形是实心的,所以线段在矩形内部也算相交,并且这题要求的是求非规范相交,即端点重合算相交题解: 知道了上面这些坑点就很好做了,把矩形看成四条线段判断和线段的相交情况,然后在判断一下线段是否在矩形内部。// #include<bits/stdc++.h>#include<cstdio>#include<vector>#include<queue>#include&lt

2020-10-24 11:12:43 143

原创 FZU - 2273 Triangles【计算几何】

Triangles 题意: 给出两个三角形,要求输出两三角形的位置关系,是相交、相离还是包含,题意十分简单。这道题最先碰到是在今年的三月份,那时候还没学过计算几何写了很垃圾的代码,把它贴在后面好了// #include<bits/stdc++.h>#include<cstdio>#include<vector>#include<queue>#include<algorithm>#include<iostream>#in

2020-10-22 20:52:09 173

原创 Java 正则表达式简述

一. 概念正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、以及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑通俗点来讲,正则表达式是用来在大量字符中匹配(寻找)符合自身字符规则的字符串。二.案例java中校验某个字符串是否满足某种规则,就可以使用正则表达式^1[3|5|7|8|9]\\d{9}$比如上面这个正则表达式,^ 匹配输入字符串的开始位置, 1就是电话号码的首位1,[3|5|7|8|9]就是从这5个数字里面选一个,

2020-10-20 16:12:18 143

原创 POJ 1696 Space Ant【计算几何】

题面题意: 给出一系列二维点,问从(0,y)出发,y是这些点里纵坐标的最小值,只能左转或者直走,并且每个点只能走一次,输出能走完这些点的路径的顺序。题解: 先找到第一个点,它肯定是当y取最小时的那个点,然后接下来开始遍历,每次找的点与pre连成的线都要与pre和first连成的线的夹角最小,找到后就更新first为pre,更新pre为当前的找到的点// #include<bits/stdc++.h>#include<cstdio>#include<vector>

2020-10-18 15:25:52 120

原创 POJ - 1556 The Doors【计算几何 + 最短路】

The Doors题意 : 给出一个房间,大小为10×10,起点在(0,5),终点在(10,5),房间中有若干堵墙,问从起点到终点的最短路径。题解 : 枚举每两点,如果这两个点构成的线段没有与房间中的任何一线段相交,那么就建一条边,所有边建完之后跑一边迪杰斯特拉就好了。#include<cstdio>#include<vector>#include<queue>#include<algorithm>#include<iostream>

2020-10-14 23:57:39 710 1

原创 ZOJ 3421 ZOJ 4041【三分】

ZOJ 3421 - Error Curves题意 :给出n条一次或二次函数,x的范围是[0,1000],让我们求每个x值对应的函数值的最大值的最小值。题解 :三分x,对于每一个x找出最大的f(x),然后三分找最小值。#include<bits/stdc++.h>// #include<cstdio>// #include<vector>// #include<queue>// #include<algorithm>// #incl

2020-10-04 14:56:08 132

原创 POJ3737 POJ3301【三分】

POJ 3737 - UmBasketella题面 :给定一个圆锥的表面积(包括下底),求最大的体积和该条件下的半径和高题解 :三分半径,当半径等于0的时候为下限,当母线等于r的时候为上限。易得出半径的范围(0,sqrt(s/(2*pi)))。由 S = pi * r * (r + l) 易得出 l = (s - pi * r^2) / (pi * r) , h = sqrt(l^2- r^2) ,所以 v =(pi * r^2 * h) / 3。#include<cstdio>#inc

2020-10-04 10:59:11 246

空空如也

空空如也

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

TA关注的人

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