摘要:我参照了这个:https://blog.csdn.net/hzoi_ztx/article/details/54898323 这类问题通常有n个物品,一每个物品通常有一个value和wight(具体情况具体分析),问你从中选k个物品,他们的平均值最大是多少 首先,我们确定一个事情就是你不能拿前k个
阅读全文
随笔分类 - 算法
摘要:循环判断 i%(i-next[i]) == 0 && next[i] != 0 循环长度 i-next[i];
阅读全文
摘要:这个是求一个图有几个强联通分量的算法 先讲一下应该流程 首先输入一个图G,创建一个反向的图GT 图G 对图进行dfs遍历,纪录每个点结束搜索的时间p[i] p[1]=2 p[2]=1 p[3]=5 p[4]=4 p[5]=3 接下来对GT进行dfs搜索 对图GT进行搜索的时候,先从之前纪录的时间最晚
阅读全文
摘要:主要就是每个位置x管理 x-lowbit(x)的长度 只要理解这句话就行了 树状数组主要用于区间查询和单点修改 所以用来求a[n]的数组中的k这个点,有多少个点比k这个点小
阅读全文
摘要:#include using namespace std; int nextr[100]; int main() { char str[100]; char ptr[100]; } void kmp(char *str,int n) { nextr[0]=-1; int k; k=0; for(int i=1;i-1 && str[k+1] !=...
阅读全文
摘要:其实就是把一堆物品分块 分成1,2,4,8.。。。。。。 这样就可以组合成任意一个数
阅读全文
摘要:完全背包的话 就是说每一个背包都有n个可以放进 这个复杂度比较高 我们进行了优化 递归方程可以写成 dp[i][j] = max(dp[i][j],dp[i][j-w[i]] + v[i]); 优化的方法: 1、dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]] +
阅读全文
摘要:题目 poj2887 这个题我一看是1e6 并且多次查询,第一想到的是树状数组和线段树,因为是多次查询嘛,但是这个题查询的复杂度是1,但是字符串拼接的复杂度却是1e6 这个题我当时感觉是分桶法了,分桶法的目的就是提前能够判断某个数在哪个区间,并在这个区间中去寻找, 分开管理每个桶里面装的字符 之后查
阅读全文
摘要:类型: 有一个背包,容量为w,给你几种物品的体积和价值,问怎么放才能使背包总价值最高 数据:包包体积5 3件物品 价值 3 5 4 体积 2 4 1 上面的数字0-5代表背包容量为0-5时的情况 dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]] + v[i]) 讲真
阅读全文
摘要:其实优化就在 i%su[j] == 0这上面 首先 任何数都是由若干个质因子构成的,假如
阅读全文
摘要:这个算法 我个人认为是 遍历每一个点把它当成一些询问的最近祖先 1 2 3 4 5 6 low是并差集,vis是是否访问过,访问过为true,没有为false; 假设询问是(4,4),(4,5),(2,6),(3,6) 按程序最先递归到4点,之后4没有了后继节点, vis[4] = true; 证明
阅读全文
摘要:惊了,从别人那里偷了一个dfs序。世界真神奇 dfs序什么意思呢,就是对dfs走过的地方进行标序,每个节点建立一个 struct node{ int in,out; ......... }; 这个in就是你什么时候进入这个节点,out就是什么时候从这个节点出来,程序也很好实现,加个计数cnt就行了,
阅读全文
浙公网安备 33010602011771号