博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
追逐学长的背影 - 2015年12月
阅读量:4987 次
发布时间:2019-06-12

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

由于某些奇怪的原因,11月暂时被跳过了,不要在意这些细节……有缘分的话会回头看的。

BZOJ 1024 生日快乐

给一个长方形,切成n<=10份面积相等的长方形,要求这些长方形里最大的长宽比最小(也就是尽可能正方形),一开始不太理解,看了别人的博客,要使得每一块的面积相等,必然要使每一刀切下去的两块都是最终面积的倍数。由于n很小所以搜索的层数并不会很多。dfs(x,y,n)表示蛋糕xy分n块能够得到的最小的最大长宽比(类似dp的思想,有无后效性)。

BZOJ 1607 Patting Heads

这里好像是暴力的筛法,但其实并不是埃筛,因为埃筛不会访问合数。这里好像用到一个之前学过的求和式 $\sum\limits_{i=1}^{n}\lfloor\frac{n}{i}\rfloor=O(nlogn)$ ,也就是从1遍历到n,他们的所有倍数的次数加起来大概是 $O(nlogn)$ 。

最大流Dinic算法

学长去学习了最大流Dinic算法。由于本人不会故只能先抄抄别人的模板,先对比一下哪个模板更强。

学长的模板:

bool bfs(){    memset(dis,-1,sizeof(dis));    q[1]=0; dis[0]=1;    h=0;t=1;    while (h
0 && dis[edge[i].to]<0) { dis[edge[i].to]=dis[j]+1; q[++t]=edge[i].to; } i=edge[i].next; } } if (dis[num]>0) return true; else return false;}long long dfs(int loc,long long low){ if(loc==num)return low; long long flow,cost=0; for(int i=cur[loc];i;i=edge[i].next) if(dis[edge[i].to]==dis[loc]+1) { flow=dfs(edge[i].to,min(low-cost,edge[i].v)); edge[i].v-=flow;edge[i^1].v+=flow; if(edge[i].v) cur[loc]=i; cost+=flow;if(cost==low)return low; } if(!cost)dis[loc]=-1; return cost;}long long dinic(){ long long temp=0; while (bfs()) { for (int i=0; i<=num; i++) cur[i]=head[i]; temp+=dfs(0,maxl); } return temp;}
View Code

 其他:

发现C++的log函数的写法:以m为底的对数=log(n)/log(m)

转载于:https://www.cnblogs.com/Yinku/p/10478329.html

你可能感兴趣的文章
RTT之柿饼UI
查看>>
C51 笔记
查看>>
wkhtmltopdf导出html到pdf
查看>>
Flutter 目录结构介绍、入口、自定义 Widget、MaterialApp 组件、Scaffold 组件
查看>>
小记5.8面试
查看>>
关于Windows7下创建Cocos2D-X项目的小问题
查看>>
java之大文件断点续传
查看>>
全文搜索引擎Xapian
查看>>
QRadioButton 使用方法
查看>>
[LeetCode] Exclusive Time of Functions 函数的独家时间
查看>>
RN 开发常见小问题
查看>>
setjmp 与 longjmp
查看>>
Keil提示premature end of file错误 无法生成HEX文件
查看>>
JavaWeb学习总结第四篇--Servlet开发
查看>>
爬取翻译
查看>>
python中面向对象元类的自定义用法
查看>>
调试LD_PRELOAD注入的代码
查看>>
每天一个linux命令(8):cp 命令
查看>>
adb连接模拟器遇到的问题
查看>>
oc中字典的实现方法详解
查看>>