摘要: 单调队列 zhk手写单调队列定义: 初始时 l=r=0 (l,r] 为有效元素 删除最左元素 ++l 删除最右元素 --r 队列有有效元素:l+1<=r ,即 l<r 取最左点 q[l+1] 取最右点 q[r] #include<iostream> #include<cstdio> #define 阅读全文
posted @ 2019-11-07 21:18 pai_hoo 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 写此题时并不会multiset,就写了个树状数组 先把100,000,000的数据离散化了,最多就对映到1-200,000(理由见数据范围 开权值树状数组,即1-200,000的范围 排序后贪心思路是一样的,查询第1个大于等于是什么数时就二分 初始区间为 左端点:当前奶牛花钱最小值 右端点:N+M 阅读全文
posted @ 2019-11-07 17:18 pai_hoo 阅读(112) 评论(0) 推荐(0) 编辑
摘要: Number2000ms 65536KB【 description】 有 N(2<=N<=15)个数 A1,A2,....,An-1,An,如果在这 N 个数中, 有且仅有一个数能整除 m, 那么整数 m 就是一个幸运数, 你的任务就是在给定A1,A2,....,An-1,An 的情况下, 求出第 阅读全文
posted @ 2019-11-07 17:14 pai_hoo 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 树上分组背包模型, 即每个子树选一种状态,状态为f[x][y]表示以x为根的子树中选y个的最大价值,怎么选并没有影响 注意y>=1则x必须选,即x必须先选了,y即其子节点才能选 同样是森林,需要建立虚点N+1连向无先行课的课 #include<iostream> #include<cstdio> # 阅读全文
posted @ 2019-11-07 17:07 pai_hoo 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 每个节点只与其子节点状态有关,所以设f[x][0/1]表示x点不选或选 建立一个虚点N+1链接到所有最高级的没有上司的上司,答案就是f[N+1][0],因为虚点不可选 #include<iostream> #include<cstdio> #define ri register int #defin 阅读全文
posted @ 2019-11-07 16:39 pai_hoo 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 多重背包可行性贪心+dp解法 就是一个面值已经可以被组成时就尽量少用当前面值的币 #include<iostream> #include<cstdio> #define ri register int #define u int namespace opt { inline u in() { u x 阅读全文
posted @ 2019-11-07 15:46 pai_hoo 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 贪心 第一次用multiset,感觉还有点用好像,就是个自动排序数组,log级(堆:是不是玩不起 开始用的离散花+权值树状数组+二分,是麻烦些 #include<iostream> #include<cstdio> #define ri register int #define u long lon 阅读全文
posted @ 2019-11-07 14:58 pai_hoo 阅读(135) 评论(0) 推荐(0) 编辑