- 博客(51)
- 收藏
- 关注
原创 搞不懂的暴搜
暴搜优化.分析:令第 i 种装备的数量为sum[i],显然如果 sum[i]不为 0 那么这种装备必选一件,在这时需要考虑的总方案数为 ∏max(sum[i], 1),其中 ∑sum[i] ≤ 50。最坏情况下所有sum 的值都相同,令它们都等于 k,则方案数为 kn/k ,当 k 取 3 时取到最大值 3n/3 ,在 n = 50 时并不算太大,因此可以直接爆搜所有方案得到最优解。需要注意的是,sum[i] = 0 的部分应该直接跳过,以保证搜索树上每一层的节点数至少是上一层的两倍,使得时间复
2020-07-24 10:45:41
197
原创 链式前向星
个人理解:把同起点的每条边用next链起来,head数组存每个起点的最后一条加入的边的编号链式前向星用了单链表头插法的思想,所以在遍历一个点连接的边的时候,先加入的边后访问。自行画图理解#include <bits/stdc++.h>using namespace std;struct edge{ int to; //该边指向的点 int next; //以u为起点的上一条边的编号 int w; //权值}e[500];int cnt = 0; //边的编号int he
2020-07-23 09:15:06
214
原创 牛客多校第四场 H 贪心+埃氏筛
Harder Gcd Problem.题意1到n个数,取两个不互质的数配对,求最多能配几对。分析根据题意易得偶数肯定能互相配对,但是像10,14这种偶数也能跟5,7这种素数配对,所有要用贪心的思想,如果单纯的让偶数和偶数配对,那么素数就用不到了,结果可能就不是最优的,如果让把一些偶数取出来去和素数配对,结果就是最大的。所以先让素质去找他的倍数配对,用过的数用vis标记一下。比如n=10 的时候,1到10个数。如果单纯偶数和偶数配: 2和4 , 6和8, 5和10 ,这样3就没有用上,而且才3对
2020-07-22 17:11:50
181
原创 贪心BFS
题目 Tractor.代码很好写,就是在经典bfs基础上加一个贪心的思想从起点开始,往四个方向走,碰到有草的且没有走过的就放在最前面优先搜索(可以用双端队列或者优先队列实现);到原点就输出草的数量;优先队列代码#include<bits/stdc++.h>#define ll long long#define T int t;scanf("%d", &t);while(t--)using namespace std;int dx[]={0,0,-1,1};int dy
2020-07-22 11:42:11
216
原创 扩展欧几里得 基础
先放一下欧几里得(辗转相除法)求最大公约数int gcd(int a,int b){ return b == 0 ? a : gcd(b,a % b);}学扩展欧几里得之前,先了解一下贝祖定理:如果a、b是整数,那么一定存在整数x,y使得ax+by=gcd(a,b)。换句话说In a way,如果ax+by=n有解,那么n一定是gcd(a,b)的若干倍。(可判断一个这样的式子有没有解)常用 如果ax+by=1有解,那么gcd(a,b)=1也就是说如果gcd(a,b)!=1 无解…在
2020-07-19 21:36:43
196
原创 简单dp
题目.Problem Description初始有a,b 两个正整数,每次可以从中选一个大于 1 的数减 1,最后两个都会减到 1,我们想知道在过程中两个数互质的次数最多是多少。Input第一行一个正整数 test(1 <= test <= 1000000)test(1 ≤ test ≤ 1000000) 表示数据组数。接下来 test 行,每行两个正整数 a, b(1 <= a, b<= 1000)a,b(1 ≤ a,b ≤1000)。Output对于每组数据,一行一
2020-07-19 20:14:20
428
原创 整除分块——牛客青铜白银局
整除分块.找规律太难了最简单当然暴力求解,但数据是1e13, 必T;所以另寻他法:有许多n/i的值是一样的,而且它们呈一个块状分布以10为例,先打个表i12345678910n/i10532211111n/(n/i)123551010101010我们可以发现n/(n/i)相同的一段n/i也相同,且n/(n/i)的值是n/i相同的一块的最后一个i的下标,所以i=7~10这一段其实不用暴力求一变n/i,只需要(n
2020-07-19 09:23:26
216
原创 ST表(倍增)
功能它是解决RMQ问题(区间最值问题)的一种强有力的工具它可以做到O(nlogn)O(nlogn)预处理,O(1)O(1)查询最值原理利用倍增思想,以最大值为例用maxx[i][k]表示区间(i,i+2k)最大值;显然maxx[i][0]=本身;2k=2*2k-1=2k-1+2k-1;所以区间(i,i+2k)=(i,i+2k-1)+(i+2k-1,i+2k)所以可以运用动态转移方程maxx[i][k]=max(maxx[i][k-1],maxx[i+2k-1][k-1]);//预处理f
2020-07-17 11:48:30
430
原创 [网络最大流模板题](https://www.luogu.com.cn/problem/P3376).
网络流的相关定义:源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点。汇点:另一个点也很特殊,只进不出,叫做汇点。容量和流量:每条有向边上有两个量,容量和流量,从i到j的容量通常用c[i,j]表示,流量则通常是f[i,j].通常可以把这些边想象成道路,流量就是这条道路的车流量,容量就是道路可承受的最大的车流量。很显然的,流量<=容量。而对于每个不是源点和汇点的点来说,可以类比的想象成没有存储功能的货物的中转站,所有“进入”他们的流量和等于所有从他本身“出去”的流量。最大流:把源
2020-07-17 10:48:39
1625
原创 二分答案(技巧)
牛牛爱学习.题目描述疫情期间,牛牛宅在家里无事可做,于是就在网上买了n本书,每本书都有一个知识值为ai。每读一本书,牛牛的知识力就会上升ai点。当然了,因为牛牛的精力也是有限的,如果同一天连续读k本书,获得的知识力只能增加ai-k+1点。比如第一天看了知识值为5的书,那么牛牛会获得5点知识力,如果这一天在继续看另一本知识值为5的书,只能获得4点知识力,如果看了前面两本书后在继续看一本知识值为2的书,就只能获得0点知识力。牛牛想知道如果他要获得m点知识力,最少需要看几天。注意:看书不需要按顺序,一本书只
2020-06-21 13:00:20
743
原创 恶魔果实
组合题(牛客): 恶魔果实.题目描述牛牛得到了一堆神奇的恶魔果实,每个恶魔果实都给了牛牛一个改变数字的能力,可以把数字a变成数字b,现在牛牛有一个数字x,他想知道吃完这n个恶魔果实后,他可以把数字x变成多少种的数。注:每一个恶魔果实的能力可以重复使用多次,当然也可以不用,存在相同能力的恶魔果实.输入描述:第一行输入一个正整数x(1≤x≤109),和一个正整数n(1≤n≤106),接下来n行,每行一个a(0≤a≤9 )和一个b(1≤b≤9)。输出描述:表示可以变的数字种类数,答案对104+7取模
2020-06-21 12:36:00
302
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅