博客园 首页 私信博主 显示目录 隐藏目录 管理 动画
摘要: 题目大意:将 n 个数 ai分成若干连续的段,使得每段的和都相等,求最多可以分成多少段。 思路: 考虑ai的和为sum,那么每一段的和就是约数。 对于每一个d,考虑其是否合法。 1e6之内用桶统计不会超时。 c++ include using namespace std; int n; int an 阅读全文
posted @ 2018-08-31 15:53 Allorkiya 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 思路: 似乎和某次培训的题很像啊。。。 将左括号记为1,右括号记为 1,那么最终一定加和为0,然后再求最小前缀和。 用dp解决即可。 c++ include using namespace std; define ll long long const int maxn = 1000010; cons 阅读全文
posted @ 2018-08-31 10:40 Allorkiya 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 思路: 考虑树形dp。 我们设$dp[i][j][0/1]$表示在$i$为根的子树中花费$j$单位时间,最终回到/不必回到$i$的最大收益。 转移三种: $dp[x][j][0] = max(dp[x][j][0],dp[x][j k 2][0] + dp[y][k][1]);$ $dp[x][j] 阅读全文
posted @ 2018-08-31 09:01 Allorkiya 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 思路: 并查集按秩合并维护出现时间。 最早连接时间就是树上连接最大值。 $qwq$我居然把路径压缩和按秩合并打到一个程序里了...OvO c++ include using namespace std; const int maxn = 1000010; struct edge { int to; 阅读全文
posted @ 2018-08-31 08:38 Allorkiya 阅读(216) 评论(0) 推荐(0) 编辑