![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
火车史湘云外
这个作者很懒,什么都没留下…
展开
-
期望与概率洛谷p3802
###题面 请注意,无论前 6 个魔法是否已经参与施放终极魔法,只要连续 7 个魔法的属性各不相同,就会再触发一次终极魔法。例如,如果用序号来代表一种魔法,魔法的施放序列为 1, 2, 3, 4, 5, 6,7, 1则前 7 个魔法会触发一次终极魔法,后 7 个魔法会再触发一次终极魔法。 现在帕琪有 7 种属性的能量晶体,第 i 种晶体可以施放出属性为 i 的魔法,共有 aia_iai 个。每次施放魔法时,会等概率随机消耗一个现有的能量晶体,然后释放一个对应属性的魔法。 ###分析 令S=∑i=17aiS原创 2020-08-15 22:07:00 · 169 阅读 · 0 评论 -
最小生成树kruskal
###题意描述 约翰有N个牧场,编号依次为1到N。每个牧场里住着一头奶牛。连接这些牧场的有P条道路,每条道路都是双向的。第j条道路连接的是牧场Sj和Ej,通行需要Lj的时间。两牧场之间最多只有一条道路。约翰打算在保持各牧场连通的情况下去掉尽量多的道路。 约翰知道,在道路被强拆后,奶牛会非常伤心,所以他计划拆除道路之后就去忽悠她们。约翰可以选择从任意一个牧场出发开始他维稳工作。当他走访完所有的奶牛之后,还要回到他的出发地。每次路过牧场i的时候,他必须花Ci的时间和奶牛交谈,即使之前已经做过工作了,也要留下来再原创 2020-08-15 17:09:52 · 220 阅读 · 0 评论 -
数位dp(邦的轩辕)
数位dp的基础 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数。所谓数位dp,字面意思就是在数位上进行dp咯。数位还算是比较好听的名字,数位的含义:一个数有个位、十位、百位、千位…数的每一位就是数位啦! 之所以要引入数位的概念完全就是为了dp。数位dp的实质就是换一种暴力枚举的方式,使得新的枚举方式满足dp的性质,然后记忆化就可以了。 两种不同的枚举:对于一个求区间[le,ri]满足条件数的个数,最简单的暴力如下: for(int i=le;i<=ri;i++)转载 2020-07-10 16:20:26 · 99 阅读 · 0 评论 -
线段树模板结构体
#include<bits/stdc++.h> #define ll long long using namespace std; int n,m,a[1000005],mod; struct node{ ll sum,l,r,mu,add; }t[1000005]; ll read(){ ll x=0;char ch=getchar(); while(ch<'0'||ch>'9')ch=getchar(); while(ch>='0'&am.原创 2020-06-18 20:33:27 · 181 阅读 · 0 评论 -
线段树的题2033
pt.1 前言 这是一道线段树题 而且是一道线段树裸题 而且是一道线段树模板题!!! 链接 : p3373 线段树2 你会惊奇的发现 , 只有输入部分的一个数据的位置不一样 : 操作总数mm跑到数列a[i]a[i]后面去了而已 , 其他几乎完全一样 关于线段树 , 可以去OI Wiki康康 , 我觉得那里的图很好 pt.2 解题 不难看出 , 我们只要对这个区间进行区间修改(加 , 乘)和区间查询(求和)即可 2.1 建树 对于区间修改和查询 , 既然是loglog的操作 , 那么肯定是要二分的 我们知道原创 2020-06-18 20:14:50 · 140 阅读 · 0 评论 -
线段树板子
#include<bits/stdc++.h> #define MAXN 1000001 #pragma GCC optomizer(2) #define ll long long using namespace std; unsigned ll n,m,a[MAXN],ans[MAXN<<2],tag[MAXN<<2]; inline ll ls(ll x) { return x<<1; } inline ll rs(ll x) { retu原创 2020-06-09 17:08:36 · 86 阅读 · 0 评论 -
线段树,洛谷3372
#include<bits/stdc++.h> #define MAXN 1000001 #define ll long long using namespace std; unsigned ll n,m,a[MAXN],ans[MAXN<<2],tag[MAXN<<2]; inline ll ls(ll x) { return x<<1; } inline ll rs(ll x) { return x<<1|1; } void s原创 2020-06-09 16:44:50 · 107 阅读 · 0 评论 -
并查集的板子
#include<bits/stdc++.h> using namespace std; int n,m; int z,x,y,f[10010]; int get(int k){ if(f[k] == k)return k; return f[k] = get(f[k]);//并查集的建树,只关注树根,而不关注数的具体形状 } int main(){ cin >> n >> m; for(int i = 1;i <= n;i ++){ f[i] = i.原创 2020-06-08 17:31:34 · 131 阅读 · 0 评论 -
手写堆(邦的轩辕)
#include<bits/stdc++.h> using namespace std; int heap[100000]; int n=0; void up(int p)//建立小根堆,p为建立的顺序 { while(p>1) { if(heap[p]<heap[p/2]) { swap(heap[p],heap[p/2]); p=p/2; } else break; } } void insert(int val原创 2020-06-07 15:38:09 · 112 阅读 · 0 评论 -
背包
#include<bits/stdc++.h> using namespace std; int max(int a,int b) { if(a>b) return a; else return b; } int main() { int a,b; cin>>a>>b; int value[35]; int f[35][35];//f[i][j]i表示第i件物品,j表示体积为j; memset(f,0,sizeof(f)); for(in原创 2020-06-05 20:36:19 · 104 阅读 · 0 评论 -
dfs的心得与感悟
void dfs()//参数用来表示状态 { if(到达终点状态) { …//根据题意添加 return; } if(越界或者是不合法状态) return; if(特殊状态)//剪枝 return ; for(扩展方式) { if(扩展方式所达到状态合法) { 修改操作;//根据题意来添加 标记; dfs(); (还原标记); //是否还原标记根据题意 //如果加上(还原标记)就是 回溯法 } } } ...原创 2020-06-05 20:35:29 · 132 阅读 · 0 评论