![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
@Sats
这个作者很懒,什么都没留下…
展开
-
leetcode-887-鸡蛋掉落(包含最大值最小化,最小值最大化的二分优化+滚动数组的原理)
leetcode887鸡蛋掉落原创 2023-11-05 14:58:54 · 218 阅读 · 0 评论 -
poj 2965二进制
1.题意 有一个4*4的(+,-)符号矩阵,改变一个元素的符号,所在行列都反转最少次数,让所有符号变成 - 号 并打印出符号位置; 2,思路 翻转的执行先后序列不影响结果; 每个点最多一次,有翻和不翻的选择; 0-0xFFFF表示矩阵状态,看最后状态是不是0x3FFFF,我们用0代表+,1代表-; 3,代码 #include<cstdio> #include<iostream...原创 2020-03-16 00:31:41 · 95 阅读 · 0 评论 -
poj 1129 dfs+四分图——染色问题
一,题意 当一个广播电台在一个非常大的地区,广播站会用中继器来转播信号以使得每一个接收器都能接收到一个强烈的信号。然而,每个中继器必须慎重选择使用,使相邻的中继器不互相干扰。如果相邻的中继器使用不同的频道,那么就不会相互干扰。 由于无线电频道是一有限的,一个给定的网络所需的中继频道数目应减至最低。编写一个程序,读取一个中继网络,然后求出需要的最低的不同频道数。 相当于:一个有N个节点的无向图,要...原创 2020-03-20 16:01:10 · 143 阅读 · 0 评论 -
POJ 3259 Bellman_ford,SPFA
** 1.题意: ** 在探索他的许多农场,农场主约翰发现了一些惊人的虫洞。虫洞非常特殊,因为它是一种单向路径送你到目的地之前进入虫洞!每个FJ农场由N (1≤N≤500)字段方便编号1 . .N, M(1≤≤2500)路径,和W W(1≤≤200)虫洞。 FJ穿越时光的狂热粉丝,他想做以下几点:开始在一些领域,通过一些路径和虫洞旅行,回到起始时间他最初的离开。也许他将能够满足自己:)。 帮助F...原创 2020-03-16 00:07:49 · 91 阅读 · 0 评论 -
POJ 1789 Truck History(prime Ku)
一,题意 用7个小写字母表示每种卡车的型号,两种型号之间的距离为不同的字母个数(不同字母个数指 str1[i] != str2[i] ),求一条能够连接所有卡车的最短路径 代码 prime(),套用模板就可以了 #include<iostream> #include<cstring> using namespace std; int n; const int ...原创 2020-03-17 23:40:07 · 75 阅读 · 0 评论 -
最小生成树(Prime)
一,最小生成树构造(prime算法) dis[]数组:当前的树到其他各个顶点的边的最小值,dis[5]表示在当前构造的树当中,距离顶点5的距离最小值; visit[];表示哪些点已经加入到树中 mp[][];邻接矩阵存图 path[];path[5]表示最终的最小生成树中到5这个点的前驱;相当于记录了最小生成树的边 随意选择一个顶点,构成一棵树,并初始化dis数组为该顶点到其他顶点的距离,到自己的距离为0 从dis中选择最小的且没有加入到树的顶点记为v,将该顶点加入到树中visit[v]=true,然后更原创 2021-08-31 23:50:41 · 455 阅读 · 0 评论 -
拓扑排序
一,简介 拓扑排序是针对有向无回路图的。对有向无回路图G=(V,E)进行拓扑排序后,结果为该图所有顶点的一个先行序列,满足如果G包含有向边(u , v ),则在该序列中, u 就出现在 v 的前面(如果图存在回路,就不可能存在这样的线性序列)。 【算法导论】 有向无回路图用于说明事件发生的先后次序,比如完成某个工程就会存在一个次序关系,先要完成这个工作,然后才能完成那个工作。 二,解决思路 (1)在有向图中选一个没有前驱的顶点且输出之 (2)从图中删除该顶点和所有以它为尾的边。 如果有向图中找不到一个没有原创 2021-09-01 00:09:33 · 198 阅读 · 0 评论 -
poj1789——kuskal最小生成树
#include<iostream> #include<cstring> #include<algorithm> #define MAX 2002000 using namespace std; int parent[2002], n; char str[2002][10]; struct node{ int s, e, v; }g[MAX]; int distance(char a[], char b[]){ int count = 0; for(int i原创 2021-08-31 23:54:10 · 57 阅读 · 0 评论 -
Poj 3041(最小覆盖数)
1,题意 有一个n*n的网格,网格有k个障碍物,有一种武器能摧毁特定的某行或者某列的障碍物。求最少使用多少次武器就可以摧毁所有障碍物 给定第一行n,m(障碍物个数),接下来m行障碍物的坐标 2,思路 最开始想到的是搜索,但其实也可以用二分图来解决。 比如题目给定坐标(1,1),(1,3),(2,2),(3,2) 将每行每列看成一个点行和列构成二分图,将所有行和列的线消灭就可以了 只需要求出最...原创 2020-03-17 23:54:33 · 70 阅读 · 0 评论 -
Poj1050最大子矩阵和
POJ1050 题意:给定一个NN的矩阵,在矩阵中寻找一个hw的矩阵,使得对于所有可能的矩阵,这个矩阵的所有元素和最大,并输出这个最大值。 ex: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 最大子矩阵为 9 2 -4 1 -1 8 和15 思路: 代码 这里插入代码片 ...原创 2021-04-08 08:41:24 · 95 阅读 · 0 评论 -
poj_3252数位dp
组合数学 c(n, r) = c(n, n - r); c(5, 3) = c(5, 2); c(n+1, m) = c(n, m) + c(n, m - 1); c(7, 3) = c(6, 3) + c(6, 2); c(n, n - k) = c(n - 1, k) + c(n - 1, k - 1); c(10, 10 - 6) = c(9, 6) + c(9, 5); #include<iostream> #include<cstring> //组合数学 /* c(n, r原创 2021-09-01 00:58:25 · 113 阅读 · 0 评论 -
poj_1276二进制优化背包问题
多重背包 有N种物品,第i种物品的体积为Ci,价值是Wi,但是每种物品的数量都是有限的,为ni。现在有容量为V的背包,请你放入若干物品,使获得的价值尽量大。 朴素算法: 把N种物品逐个拆分,得到Σni个物品,则原问题可转化为01背包求解。这样做的时间复杂度为O(V×Σn)。 或者是在枚举种类的过程中枚举个数k,但时间复杂度也是O(V×Σn)。 二进制优化 我们可以考虑二进制的思想,将第i种物品通过二进制拆分成若干件物品, 比如20件物品可以用1,2,4,8,5这5个数进行组合并相加,就能得到20以内的任何数原创 2021-09-01 00:54:47 · 134 阅读 · 1 评论 -
poj_2528_线段树+离散化+lazy
题目 题目链接:http://poj.org/problem?id=2528 题意:第一行T:测试用例数量;第二行n,海报的数目;接下来n行,l, r,:【l, r】区间被一张海报覆盖;问最终能看到多少的海报 思路 典型的线段树,区间覆盖。不过这里(l, r)的最大值是1千万, built(1, 一千万, 1), 肯定会超时,要将坐标离散化; 离散化: 比如原题测试样例n张海报区间时: (1...原创 2020-04-18 01:45:08 · 1000 阅读 · 1 评论 -
线段树_poj_2777
题意 题目链接: http://poj.org/problem?id=2777 题意:有一个长板子,多次操作,有两种操作,第一种是给从a到b那段染一种颜色c,另一种是询问a到b有多少种不同的颜色。输入别用cin 思路 结构体node存放左右端点l, r,和染色id(num表示);num > 0; 表示这一部分[l, r]染成num色, num = 11, 表示[l, r]有多种颜色 ...原创 2020-04-17 23:21:26 · 103 阅读 · 0 评论 -
LRU算法 双链表+hashmap
一,概要 1.LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,是根据页面调入内存后的使用情况进行决策了。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU算法就是将最近最久未使用的页面予以淘汰。 代码(貌似有点问题) import java.util.HashMap; import java.text.DecimalFormat; import java.text.NumberFormat; publ原创 2021-09-01 01:05:09 · 261 阅读 · 0 评论 -
dijistra算法
一,简介 dijistra算法是求从源点开始u到其他点的最短路径问题。前提条件是带权值的边。权值为正数。 1.将每个点的距离设为无穷大,彼此都不连通。将这些点的集合设为S. 2.另一个集合为V。从源点s开始,距离设为0,放到集合V中。 3.设每条边是<u,v>。则通过dist(v) = min{dis(v),dist(u) + l(u,v)} 进行松弛操作。选取最小代价的点,放到集合V中,直到集合S中的元素被拿光结束。 二,代码 void dijistra1(int u){ int i原创 2021-09-01 00:43:43 · 563 阅读 · 0 评论 -
a^b%m
一,简介 计算A^B; 比如2^100; 100 = 64 + 32 + 4;对应二进制(1100100) 2^100 = 2^64 + 2^32 + 2^4; (a+b)% M = (a%M + b%M)%M #define ll long long ll pow(ll a, ll b){ ll base = a, r = 1; while(b){ if(b & 1) r = (r * base) % mod; base = (base * bas原创 2021-09-01 00:23:33 · 110 阅读 · 0 评论 -
矩阵快速幂(求斐波那契)
一,简介 线性代数中有: **也就表明:**图中所表示的可以理解为 f(x+1)=f(x)+f(x-1)即斐波那契数列的通式,若要求项数较大的数n斐波那契数,那么只用将矩阵A进行n-1次幂运算 #include<iostream> #include<cstdio> #define Mod 10000 using namespace std; struct Mtr{ int f[2][2]; void init1(){ //构造矩阵 f[0][0] = f[0][1]原创 2021-09-01 00:15:47 · 269 阅读 · 0 评论 -
Bellman_ford + SPFA
1,Bellmanford(最短路,判断负环); 为了求解边上带有负权值的单源最短路径 同时还可以判断是否存在权值为负数的回路,如果存在,(就没有最短路了) 反复利用已经有的边来更新最短距离,核心在松弛:dis[u] + mp[u][v] < dis[v] ,那么 dis[v] = dis[u] + mp[u][v],反复松弛之后 (一次松弛表明两点之间有了更短的路径), 如果没有负边权回...原创 2020-03-15 23:49:20 · 90 阅读 · 0 评论