mltang

博客园 首页 新随笔 联系 订阅 管理

随笔分类 -  算法

摘要:我参照了这个:https://blog.csdn.net/hzoi_ztx/article/details/54898323 这类问题通常有n个物品,一每个物品通常有一个value和wight(具体情况具体分析),问你从中选k个物品,他们的平均值最大是多少 首先,我们确定一个事情就是你不能拿前k个 阅读全文
posted @ 2018-10-29 20:55 mltang 阅读(451) 评论(0) 推荐(0)

摘要:循环判断 i%(i-next[i]) == 0 && next[i] != 0 循环长度 i-next[i]; 阅读全文
posted @ 2018-07-31 17:50 mltang 阅读(119) 评论(0) 推荐(0)

摘要:这个是求一个图有几个强联通分量的算法 先讲一下应该流程 首先输入一个图G,创建一个反向的图GT 图G 对图进行dfs遍历,纪录每个点结束搜索的时间p[i] p[1]=2 p[2]=1 p[3]=5 p[4]=4 p[5]=3 接下来对GT进行dfs搜索 对图GT进行搜索的时候,先从之前纪录的时间最晚 阅读全文
posted @ 2018-05-11 02:44 mltang 阅读(150) 评论(0) 推荐(0)

摘要:主要就是每个位置x管理 x-lowbit(x)的长度 只要理解这句话就行了 树状数组主要用于区间查询和单点修改 所以用来求a[n]的数组中的k这个点,有多少个点比k这个点小 阅读全文
posted @ 2018-04-23 12:38 mltang 阅读(91) 评论(0) 推荐(0)

摘要:当前所在位的最长上升子序列只和前面一个字符有关 } 阅读全文
posted @ 2018-04-18 15:27 mltang 阅读(141) 评论(0) 推荐(0)

摘要:#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] !=... 阅读全文
posted @ 2018-04-15 11:37 mltang 阅读(143) 评论(0) 推荐(0)

摘要:其实就是把一堆物品分块 分成1,2,4,8.。。。。。。 这样就可以组合成任意一个数 阅读全文
posted @ 2018-04-13 00:02 mltang 阅读(187) 评论(0) 推荐(0)

摘要:完全背包的话 就是说每一个背包都有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]] + 阅读全文
posted @ 2018-04-05 00:54 mltang 阅读(741) 评论(0) 推荐(0)

摘要:题目 poj2887 这个题我一看是1e6 并且多次查询,第一想到的是树状数组和线段树,因为是多次查询嘛,但是这个题查询的复杂度是1,但是字符串拼接的复杂度却是1e6 这个题我当时感觉是分桶法了,分桶法的目的就是提前能够判断某个数在哪个区间,并在这个区间中去寻找, 分开管理每个桶里面装的字符 之后查 阅读全文
posted @ 2018-04-04 21:12 mltang 阅读(147) 评论(0) 推荐(0)

摘要:类型: 有一个背包,容量为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]) 讲真 阅读全文
posted @ 2018-04-03 21:44 mltang 阅读(105) 评论(0) 推荐(0)

摘要:其实优化就在 i%su[j] == 0这上面 首先 任何数都是由若干个质因子构成的,假如 阅读全文
posted @ 2018-03-16 20:19 mltang 阅读(128) 评论(0) 推荐(0)

摘要:这个算法 我个人认为是 遍历每一个点把它当成一些询问的最近祖先 1 2 3 4 5 6 low是并差集,vis是是否访问过,访问过为true,没有为false; 假设询问是(4,4),(4,5),(2,6),(3,6) 按程序最先递归到4点,之后4没有了后继节点, vis[4] = true; 证明 阅读全文
posted @ 2017-11-10 18:04 mltang 阅读(191) 评论(0) 推荐(0)

摘要:惊了,从别人那里偷了一个dfs序。世界真神奇 dfs序什么意思呢,就是对dfs走过的地方进行标序,每个节点建立一个 struct node{ int in,out; ......... }; 这个in就是你什么时候进入这个节点,out就是什么时候从这个节点出来,程序也很好实现,加个计数cnt就行了, 阅读全文
posted @ 2017-11-05 12:28 mltang 阅读(212) 评论(0) 推荐(0)