摘要: #include #include #include #include #include #define M 100000 #define pa pair//优先比较第一个元素 using namespace std; int d[M],n,m,cnt,head[M],next[M],u[M],dis[M],num,s,t; bool f[M]; void add(int from,int t... 阅读全文
posted @ 2016-04-25 21:30 一入OI深似海 阅读(1881) 评论(0) 推荐(1) 编辑
摘要: /* 树形DP 根节点一定有人 然后 剩下的人没到每个孩子去 因为孩子数可能很多 不好枚举 所以转二叉树 分两部分 O(sum)就可以了 当然 转二叉树候必须顾及原来树的一些性质 如不能只选左孩子 转化好了之后就是DP了 写的记忆化 递归每个节点 枚举分给左右孩子的人数 */ #include #include #include #define maxn 1010 using namesp... 阅读全文
posted @ 2016-04-25 19:30 一入OI深似海 阅读(240) 评论(0) 推荐(0) 编辑
摘要: /* 一开始认为是个水题 直接模拟 没想到只得了50分 一看数据吓niao了 模拟妥妥的TLE 实在不好优化了0.0(最快O(m)) 然后借鉴别人的 DP+神奇的输出 DP:状态:f[i][j] 前i个字符出现j次1的数字个数 很容易想到 如果i是1 f[i][j]=f[i][j]+f[i-1][j-1] 如果i是0 f[i][j]=f[i][j]+f[i-1][j] 初始化 i==... 阅读全文
posted @ 2016-04-25 16:43 一入OI深似海 阅读(180) 评论(0) 推荐(0) 编辑
摘要: /* 算法描述:维护一个s[p]表示累加和 并且更新最大值ans 如果s[p]<0 则从p+1重新累加 证明:设某个区间的起点和终点分别为s t 分两种情况 1.t0 s1=s3-s2 所以有s3>s1 即 从1开始更优 2. t>=p:设s2表示1到p的累加和 s1表示1到s的累加和 s3表示s到p的累积和 根据前面的条件 s1>0 s2s4 即s[p]<0 时 重新;累加更优 */ ... 阅读全文
posted @ 2016-04-25 10:25 一入OI深似海 阅读(386) 评论(0) 推荐(0) 编辑