博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
挑战程序设计竞赛(第2版) 第3章笔记
阅读量:7100 次
发布时间:2019-06-28

本文共 1106 字,大约阅读时间需要 3 分钟。

对于小数的二分

可以写成循环\(n\)次的形式,\(100\)次循环可以达到\(10^{-30}\)的精度。小心因为eps设得太小导致死循环。

最大化平均值的二分

一些有除法的题目都需要用到这种技巧。

例题

\(n\)个有价值和重量的物品,从中选出\(k\)个使得单位重量的价值最大。

算法

二分答案\(x\),然后就需要判断:\[\sum {v_i} \div \sum {w_i} \geqslant x\]

就有\[\sum {v_i - x \cdot w_i} \geqslant 0\]
接着贪心选取即可。

开灯问题(矩阵中)的新解法

核心:只要枚举第一行的开关情况,就能够确定其他格子的操作。

集合的枚举

枚举大小为\(k\)的子集方法:

int comb = (1 << k) - 1;whlie (comb < 1 << n) {    // insert code here    int x = comb & -comb;    int y = comb + x;    comb = ((comb & ~y) / x >> 1) | y;}

折半搜索

适用于\(n(30)\)的题目。

find函数

例子:

posi = find(a.begin(), a.end(), 1024) - a.begin()

i -= i & -i等价于 i &= i - 1

区间修改,区间询问

如果操作的结果可以用\(i\)\(n\)次多项式表示,那么就可以使用\(n + 1\)个树状数组来维护。

例子:区间加上一个值,询问区间值的和。

\(s(i)\)为前缀和。表示成如下形式\[s(i) = a \cdot i + b\]

如果在\([l,r)\)加上x,那么有:

\(i < l : s'(i) = s(i)\)
\(l \leqslant i \leqslant r : s'(i) = s(i) + x \cdot i - x \cdot (l-1)\)
\(r < i : s'(i) = s(i) + x \cdot (r - l + 1)\)

merge函数

用于归并排序!

merge(data1.begin(), data1.end(), data2.begin(), data2.end(), datanew.begin());

二分图的特殊的东西

对于任意图:

  • 不存在孤立点:最大匹配+最小边覆盖=n
  • 最大独立集+最小点覆盖=n

对于二分图,还有:

  • 最大匹配=最小点覆盖

转载于:https://www.cnblogs.com/wangck/p/4276571.html

你可能感兴趣的文章
java服务端微信小程序支付
查看>>
flip 翻转效果 css3实现
查看>>
Cocos Creater 监听程序到后台和重新到前台
查看>>
Windows 10 应用创建模糊背景窗口的三种方法
查看>>
Python类与标准库
查看>>
学生表、课程表、 成绩表 、教师表sql练习
查看>>
vue inheritAttrs、$attrs和$listeners使用
查看>>
诗歌的分类
查看>>
nexus maven私服搭建
查看>>
系统空间占用排查 tomcat超大日志catalina.out 删除 与df 状态更新
查看>>
Flutter完整开发实战详解
查看>>
Myeclipse如何改变编码方式
查看>>
ios7 设置status bar风格
查看>>
Android Service 组件
查看>>
TRUNC 截取日期或数字,返回指定的值。
查看>>
【erlang】erlang几种生成随机数的方法
查看>>
BizTalk开发系列(二十二) 开发自定义Map Functoid
查看>>
在Windows Mobile和Wince(Windows Embedded CE)下Win32项目加入ATL支持
查看>>
在Asp.Net MVC中用Ajax回调后台方法
查看>>
JAVA-JDBC
查看>>