【题解】CF#833 B-The Bakery】的更多相关文章

B. The Bakery http://codeforces.com/contest/833/problem/B 题意: 将一个长度为n的序列分成k份,每份的cost为不同的数的个数,求最大cost的和.1≤n≤35000,1≤k≤50 分析: dp[i][j]表示前i个数,分了j份.dp[i][k]=dp[j][k-1]+cost(j+1,i):cost(j+1,i)为这一段中不同数的个数. 然后考虑如何优化.发现每次增加一个位置,pre[i]~i-1区间的每个转移的位置的cost+1.然后…
一个非常明显的 \(nk\) dp 状态 \(f[i][k]\) 表示以 \(i\) 为第 \(k\) 段的最后一个元素时所能获得的最大代价.转移的时候枚举上一段的最后一个元素 \(j\)更新状态即可.考虑如何优化这个过程?主要的时间消耗在两个部分:一个是确定一段区间的贡献,另一个是找到最大的值. 这两个都是可以使用线段树来维护的,一段区间的贡献我们可以扫描线,而最大值则直接线段树维护最大值.如何滚动反而好像是最难的……想了一会儿,因为显然 memset 不可接受,然而我们可以 \(O(n)\)…
CF Round #524 Div.2 - 竞赛题解 不容易CF有一场下午的比赛,开心的和一个神犇一起报了名 被虐爆--前两题水过去,第三题卡了好久,第四题毫无头绪QwQ Codeforces 传送门 Tab, 先写了ABC题,后面的之后再补 QwQ 『解析』 A-Petya and Origami 读懂题意就会做--根据题意可以求出3种"sheet"各自需要的数量,然后每一种的数量除以k向上取整后求和就是答案. B-Margarite and the best present 简单的…
还是dfs? 好像自己写的有锅 过不去 看了题解修改了才过qwq #include <cstdio> #include <algorithm> #include <cstring> #include <stack> #include <set> using namespace std; ],v[],n,m,k,ans; ],vis[]; ]; stack<int> S; void dfs(int u){ if(sons[u].size…
Olya and magical square - 竞赛题解 借鉴了一下神犇tly的博客QwQ(还是打一下广告) 终于弄懂了 Codeforces 传送门 『题目』(直接上翻译了) 给一个边长为 \(2^n(n>0)\) 的正方形,你需要对它进行恰好 \(k(k>0)\) 次"剪切","剪切"的方法是:选取一个边长不为 \(1\) 的正方形,将它剪成 \(4\) 个大小相同的正方形,不能挪动位置. 要求在 \(k\) 次操作后存在一条路径:从左下角的正方…
题面 题目大意: 给定一个 \(n\) , 所有军人的数量均在 \([1, n]\) 给定 \(a_i\) 代表高度为 \(i\) 的军人的个数 你要将这些军人分成 \(k\) 行, 满足下面两个条件 每行人数相等 同一行任意两个军人的高度差的绝对值不超过 1 问你最多能够选多少个军人分成 \(k\) 行 题解 题目满足单调性, 可以二分 我们二分一个 \(mid\) 表示每一行有 \(mid\) 个军人 不难证得首先将高度相等的分成一行, 再分高度不相等的是最优的 简要证明 : 可将不是上述方…
题目 传送门 题意 给出 \(n\),输出 \(a\) ,\(b\) (\(0 < a \leq b < n\)),使\(a+b=n\)且 \(\operatorname{lcm}(a,b)\) 最小. 思路 前言 如果你没有到现场,你永远也不会体验到cf 的 OI赛制有多强,评测队列曾超过15min,不得不让此次比赛unrated. 但是,我也不知道怎么B.C题提交把语言选成了:C11 ,然后在20分钟后完美地CE 了. 声明 lcm : 最小公倍数 minn : n 的最小质因数 mul…
随便模拟下就过了qwq 然后忘了特判WA了QwQ #include <cstdio> #include <algorithm> #include <cstring> #include <set> #include <queue> using namespace std; ],v[],fir[],nxt[],cnt=,dep[],squ[]; ]; void addedge(int ui,int vi){ cnt++; u[cnt]=ui; v[c…
是一道水题 虽然看起来像是DP,但其实是贪心 扫一遍就A了 QwQ #include <cstdio> #include <algorithm> #include <cstring> #include <set> #include <map> using namespace std; ],b[],f[]; ],bx[]; int main(){ scanf("%d",&n); scanf(); scanf(); ;i&…
题目要求很简单,做法很粗暴 直接扫一遍即可 注意结果会爆int #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; ,n,s,a[]; int main(){ scanf("%I64d %I64d",&n,&s); ;i<=n;i++) scanf("%I64d&quo…