NOIP
星和彦
https://xhyf77.github.io/
展开
-
关于完全背包的一点理解(复习)
dp[i][j]所表示的集合的含义:前i个 物品 能组成 的合为j的所有方案属性(即dp[i][j]里面存的值):方案的集合是否为空dp[i][j] = dp[i-1][j-a[i]]||dp[i-1][j-2*a[i]]||dp[i-1][j-k*a[i]].....dp[i][j-a[i]] = dp[i-1][j-a[i]]||dp[i-1][j-2*a[i]]||dp[i-1][j-k*a[i]].....所以 dp[i][j] = dp[i][j] || dp[i][j-a[i]]所以说原创 2021-11-10 15:28:36 · 254 阅读 · 0 评论 -
P2577 [ZJOI2005]午餐
贪心可得吃饭时间长的优先在前面打饭得到的解更优证明过程:假设第i个人打饭时间为a[i].da,第i个人吃饭的时间为a[i].cf,第j个人同理假设a[i].cf>a[j].cf**所以就有两种情况:1.第i个人在第j个人的前面,此时设最后一个人吃完饭的时间为t1 t1=max(a[i].cf+a[i].da,a[j].da+a[j].cf+a[i].da);2.若第j个人在第...原创 2019-07-28 18:18:10 · 185 阅读 · 0 评论 -
悬线法(解决最大子矩阵类型的问题)
悬线法:顾名思义:悬线法就如条悬着的线一般先定义几样东西:【定义子矩形】有效子矩形:内部不包含障碍点的、轮廓与整个矩形平行或重合的子矩形极大子矩形:每条边都不能向外扩展的有效子矩形。最大子矩形:所有有效子矩形中最大的一个(或多个)。我们可以很显然的看出:一个子矩阵要最大,那么这个子矩阵一定不能再向上,下,坐,右扩展,那么可得最大子矩阵是属于极大子矩阵的,那么我们只需要找出所有极大...原创 2019-07-27 12:15:27 · 463 阅读 · 0 评论 -
对于SPFA的一些理解(写给自己)
SPFA算法优点: 1.时间复杂度比普通的Dijkstra和Ford低。 2.能够计算负权图问题。 3.能够判断是否有负环核心思想我们采取的方法是动态逼近法:1.设立一个先进先出的队列2.每次取出队首元素,用队首元素到起点的最优值对与其相连的其他元素的到起点的最优值进行优化(a+b>c)正确性是显然的3.当队列为空时及所有元素优化到不能再优化了,算法结...原创 2019-07-14 21:28:00 · 545 阅读 · 0 评论 -
树状数组1(单点修改,区间查询)
第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。接下来M行每行包含3个整数,表示一个操作,具体如下:操作1: 格式:1 x k 含义:将第x个数加上k操作2: 格式:2 x y 含义:输出区间[x,y]内每个数的和#include<bits/stdc++.h>using namespac...原创 2019-05-08 12:51:37 · 400 阅读 · 0 评论 -
树状数组2(区间修改,单点查询)
输入格式:第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。接下来M行每行包含2或4个整数,表示一个操作,具体如下:操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加上k操作2: 格式:2 x 含义:输出第x个数的值#include<bits/stdc++.h>using...原创 2019-05-08 12:47:46 · 323 阅读 · 0 评论 -
并查集
**如题,现在有一个并查集,你需要完成合并和查询操作。**n个元素,m次操作#include<bits/stdc++.h>using namespace std;int n,m,x,a,b;int root[10001];int anc(int x){ if(root[x]==0) return x; else{ root[x]=anc(r...原创 2019-05-08 12:43:32 · 89 阅读 · 0 评论 -
最小生成树
**给出一个无向图,求出最小生成树,如果该图不连通,则输出orz**#include<bits/stdc++.h>using namespace std;struct rec{ int x,y,z;}edge[500010];int fa[100010],n,m,ans;bool cmp(rec a,rec b){ return a.z<b.z;}int ge...原创 2019-05-08 12:40:55 · 145 阅读 · 0 评论 -
单源最短路径(SPFA)
#include<bits/stdc++.h>using namespace std;vector<int>ver[10001],edge[10001];int n,m,s,d[10001];bool pd[40010];queue<int> q;void SPFA(){ q.push(s); pd[s]=1;d[s]=0; whi...原创 2019-05-08 12:37:45 · 197 阅读 · 0 评论 -
单源最短路径(Dijkstra)+堆优化
// luogu-judger-enable-o2#include<bits/stdc++.h>using namespace std;long long n,heap_size;long long N,m,s,dis[100010];bool vis[100010];struct node{ long long to,w;};struct vp{ l...原创 2019-05-08 12:33:13 · 326 阅读 · 0 评论 -
最小堆
int heap_size,heap[100010];void add(int d){ heap[++heap_size]=d; int now=heap_size; while(now>1){ int next=now>>1; if(heap[now]>=heap[next]) break; swap(heap[now],heap[next]); ...原创 2019-05-08 11:54:28 · 131 阅读 · 0 评论