
2016.12
Notokkkkkk
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
bzoj4518
斜率优化。把m^2乘进式子里,优化式子。注意初始化。#include#include#includelong long a[3005];long long f[3005][3005];long long s[3005];long long q[3005];int t; double Y(int j){ return (double)(f[t-1][j]+s[j原创 2016-12-04 14:24:25 · 485 阅读 · 0 评论 -
bzoj3875
用f[x]表示彻底把x消灭的代价用g[x]表示把x的衍生物(不包括x)彻底杀死的代价那么一开始f[x]就等于膜法攻击的代价,g[x]为膜法把x的衍生物逐个杀死的代价总和之后不断用一个队列(类似SPFA的思想)不断更新维护f[x]就可以了#include#include#include#include#includeusing namespace std;long lon原创 2016-12-15 20:27:22 · 456 阅读 · 0 评论 -
bzoj1002
直接用上规律:f[n]=f[n-1]*3+2-f[n-2]注意要用高精度,证明要用到基尔霍夫矩阵,而蒟蒻我不会。#include#include#includeint f[105][105];int L[105];int main(){ int n; f[1][0]=1;L[1]=1; f[2][0]=5;L[2]=1; scanf("%d",&n); for (in原创 2016-12-15 20:32:12 · 449 阅读 · 0 评论 -
bzoj1013
这道题直接根据题目给出的式子列方程组,拆开就能用上高斯消元求出坐标。然而我并不会n^2的高斯消元,所以自己打了个暴力n^3(数据小)#include#include#includedouble ans[15];double a[15][15];double s[15][15];double t[15][15];int main(){ int n; scanf原创 2016-12-15 20:34:46 · 349 阅读 · 0 评论 -
bzoj1007
一开始看到这道题只能想到n^2暴力不知道如何下手实际上,我们要找到一种筛选的办法,这种筛选方法要在某种情况(顺序)下通用,于是我们就可以按A值从大到小排序,用一个栈来维护后面加入的边所以当一条边不合法,那它一定会被后来的边给弹出栈,具体可以通过求点的坐标来得知#include#include#include#includeusing namespace std;str原创 2016-12-15 20:40:00 · 474 阅读 · 0 评论 -
bzoj1059
我们首先要推出几点:一。无论怎么变换,我的1的数量不会变化二。同一行或者同一列的1不可能经过变换然后在对角线上基于第二点,我们得出每一列最多只能选一个,每一行最多也只能选一个。如果我们选了(i,j)那么,任何处于第i行的1或者第j列的1都不能再选那么建图:如果(i,j)上的是1,那么i->j连一条边,最后求一边二分图匹配,看一看是否是完美匹配。因为当你选了i->j这条边,你原创 2016-12-15 20:42:13 · 454 阅读 · 0 评论 -
bzoj4720
这道是NOIP的题目。先用SPFA找出所有最短路用f[i][j]表示到第i个时间段时决定提出申请换教室,而加上这次申请总共用了j次申请的最小期望而g则表示这次不申请。直接按照期望的情况(申请成功与否去转移就好了)#include#include#includeint n,m,v,E;int c[30005];int d[30005];double p[30005];原创 2016-12-15 20:47:49 · 361 阅读 · 0 评论 -
bzoj1497
要求最大获利如果我能使损失的收益最小,那么就是最大获利了。把每一个中转站看成一个点,用户群也看成一个点源向中转站连边,容量为建中转站的费用用户群向汇连边,容量为收益如果用户群i需要j和k中转站,那么j,k向i连边,容量为无限大。求出最小割源到站j,k,用户i到汇这三条边是不会同时割掉的,因为不可能同时损失这两者的收益为什么因为他们中间有容量无限大的边,这边是不会原创 2016-12-15 20:53:51 · 415 阅读 · 0 评论 -
bzoj1257
给出n,kn>=k都可以直接算的。那么仅考虑n因为k%i= k-(k/i)*i (取整)所以,对于多个i值,k/i的结果是一样,所以把这些数放在一起算k-(k/i1)*i1 k-(k/i2)*i2 k*(k/i3)*i3这些数构成一个等差数列(i逐渐递增)所以我们可以一次性过掉多个i,而具体过掉多少i,用二分来查找#include#include#in原创 2016-12-15 20:24:04 · 457 阅读 · 0 评论