摘要: 题目链接 本题使用拓扑排序来规划DP顺序。设s[i][j]表示i步是否能走到j这个点,e[i][j]表示i步是否能走到j这个点——用第二条路径。因为要满足无后效性和正确性,只有第i个点已经全部更新完毕的时候才能用它来更新其他的点。所以用拓扑。 代码如下 阅读全文
posted @ 2017-09-19 20:36 Konoset 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 神祇与人三则 一. 世界因疏于管理而日渐荒芜。恶在地上行走,如同地上的瘟疫四处传播。放眼望去,凡看在眼中的人大多跟从恶。有人认为这创世的神祇是纵使恶在地上行,于是恼怒,得了力量来攻伐神祇的居所。 有海底的游鱼游过来对人说:“我在海底见过那神殿,有贝壳做成的房顶和珊瑚制成的柱子。”人听说神殿潜在海底, 阅读全文
posted @ 2017-09-17 12:30 Konoset 阅读(391) 评论(14) 推荐(2) 编辑
摘要: 题目链接 写代码能力需要极大提升。我在五分钟之内想到了单调栈,然后花了一个小时的时间去看我单调队列为啥写错了…… 首先这题需要转换自己的思维。枚举所有“最小点”,然后看它往左往右最大能扩展多少。 维护一个单调递增的序列,弹栈时就会是这种情况: 设被弹出去的元素是s,那它为什么会被弹出去呢?因为它比当 阅读全文
posted @ 2017-09-15 15:29 Konoset 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 题目链接 设f[i][0]表示第i个人不去舞会时子树的最大欢乐度,f[i][1]表示第i个人去舞会时子树的最大欢乐度。 则有状态转移方程:f[i][0]+=∑max(f[to][0],f[to][1]) f[i][1]+=∑f[to][0] 其中to是i的所有直连子节点。 初始化:f[i][1]=第 阅读全文
posted @ 2017-09-14 21:30 Konoset 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 题目链接 导致我WA十几遍的原因居然是最大值不够大……以后再也不相信memset(dis,127/3,sizeof(dis))了。 此题先将花费排序,然后二分最大花费,spfa判断解是否可行。spfa的时候遇到一个大于当前二分的花费的点就跳过。如果起点的点权超过了这个花费,或者最后到达n时的最短路径 阅读全文
posted @ 2017-09-14 17:34 Konoset 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 六月想写一部架空的世界史,设定是个可以设置法则的高魔世界。我的确动笔了,写完了时间开始之前、创世纪,还有神话纪元的开头。 然而今天我才发现…… 我三个纪元都写挂了。我把一个本来不应该有任何属性的概念写成了具有“存在”属性的实物;我想写一个类似我一样的,超然于整个世界之外的神祇,结果构思不当写成了世界 阅读全文
posted @ 2017-09-14 12:52 Konoset 阅读(198) 评论(2) 推荐(0) 编辑
摘要: TM搞了半天的二维DP方程还是错的。 这是题目链接: 设f[i]表示前i辆车顺利通过的最小时间。 则对于每一个i枚举该组车的起点j,然后从所有的f[j]+Min[j][i]中选一个最小的。 Min[j][i]表示从第j辆车到第i辆车最慢的是个什么速度。 阅读全文
posted @ 2017-09-14 08:01 Konoset 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 做顺序DP做惯了,死活没想到这是个倒序DP。 f[i]表示时刻i的最大空闲时。有以下两种可能。 1.时刻i没有任务。此时f[i]=f[i+1]+1; 2.时刻i有许多任务。此时f[i]=max(f[i+持续时间s)。 改进了一下题解。不用排序,直接链式前向星建图!哈哈哈! 代码 阅读全文
posted @ 2017-09-12 20:40 Konoset 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 题目链接 我DP是真的菜啊啊啊啊啊! f[i][j]表示考虑前i个数,有i-j+1个数组成一个上升子序列,且不以i结尾的尾端最小值。 设a为j个数组成的序列,且以i结尾;b为i-j+1个数组成的序列,且不以i结尾。 从f[i][j]到f[i+1][j+1]的转移如下: 若a后面可以接上第i+1个数, 阅读全文
posted @ 2017-09-12 19:18 Konoset 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 题目链接 不得不说attack是个天才。读入使用异或运算,令que[i][j]^=(i^j)&1,于是原题目变成了求que数组的最大相同值。 然而我还是不理解为啥,而且就算简化成这样我也不会做。 ai,我太菜了。 f[i][j]表示考虑到i,j为止的最大值。当que[i][j]=que[i-1][j 阅读全文
posted @ 2017-09-10 07:16 Konoset 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 题目链接 感觉自己DP好烂啊 道道看题解 钦定1为根,DFS搜索子树权值。如果子树权值大于0就将当前节点加上子树权值,反之就把子树扔掉。最后在所有节点的权值中寻找最优解。 这就是DFS。第一行是个记忆化,如果f[x]已经被计算过返回。但我写错了…… 然后 f[x]+=que[x]。因为f[x]是节点 阅读全文
posted @ 2017-09-09 12:51 Konoset 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 233今天蒟蒻我连文化课都没听光想着这个了 然后我调了一下午终于过了!!! 一看数据范围似乎是状压,然而216等于65536。开一个65536*65536的二维数组似乎不太现实。 所以Rqy在四月还是几月给我们讲这道题的时候说要半DFS半DP,时间复杂度O(2n*n3) 怎么个半DFS半DP法呢? 阅读全文
posted @ 2017-09-07 20:05 Konoset 阅读(701) 评论(0) 推荐(2) 编辑
摘要: 题目链接 首先来介绍欧拉函数。 设欧拉函数为f(n),则f(n)=1~n中与n互质的数的个数。 欧拉函数有三条引论: 1.若n为素数,则f(n)=n-1; 2.若n为pa,则f(n)=(p-1)*(pa-1)。 3.若gcd(a,b)=1,则f(a*b)=f(a)*f(b)。 下面代码给出欧拉函数的 阅读全文
posted @ 2017-09-07 07:23 Konoset 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 题目链接 首先介绍两个定理。 整数唯一分解定理:任意正整数都有且只有一种方式写出素数因子的乘积表达式。 \(A=(p1k1 p2k2 ...... pnkn \) 求这些因子的代码如下 for(int i=2;i*i<=a;++i){ if(!(a%i)){ prime[++num]=i; whil 阅读全文
posted @ 2017-09-06 10:28 Konoset 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 题目链接 定理:对于方程\(ax+by=c\),等价于\(a*x=c(mod b)\),有整数解的充分必要条件是c是gcd(a,b)的整数倍。 ——信息学奥赛之数学一本通 避免侵权。哈哈。 两只青蛙跳到一格才行,所以说 \(x+mt=y+nt(mod l) \) \((x-y)+(m-n)t=0(m 阅读全文
posted @ 2017-09-05 20:56 Konoset 阅读(240) 评论(0) 推荐(0) 编辑