牛客多校Round 10】的更多相关文章

咕咕咕.... 去烽火台和兵马俑了…
Solved:3 rank:187 H.travel 题意:给一颗带有点权的树 找三条不相交的链 使得点权最大 题解:使用树形DP dp[x][i][0/1] 表示x节点选择i条链 有没有经过x的链 对于每一个回溯的状态 下面的结点已经处理好了 但是处理当前结点时还有一种有两条经过x的链 实际上他们可以合成一条链 为了避免重复计算 经过当前结点的权值在更新时计算 #include <bits/stdc++.h> using namespace std; typedef long long ll…
Solved:1 rank:112 E. Music Game 题解说有个非简化的原题 bzoj4318 #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ll n, m; ll p[]; ll comb[][]; ll pow_mod(ll x, ll y) { ll res = ; while(y) { ) res = res * x % mod; x = x * x % mod; y >>…
Solved:2 rank:164 签了两个oeis,但这样真的开心嘛…
Solved:3 rank:156 J. Heritage of skywalker 学习一下nth_element 可以o (n)的找出前多少大的元素 #include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; int n; unsigned x, y, z; unsigned int tang() { unsigned int t; x ^= x << ; x ^= x >&g…
Solved:3 rank:195 F. take 官方题解:小 A 在打开第 i 个箱子后会交换手中的钻石和第 i 个箱子中的钻石 当且仅当第 i个箱子的钻石是前 i 个箱子打开后出现的所有钻石里最大的. 那么要算概率的话,前面箱子中钻石大于等于它的打开后就不能有钻石用树状数组维护一下 线段树(不会树状数组) 调了半天居然快速幂忘记写返回了 #include <stdio.h> #include <algorithm> #include <iostream> #inc…
Soved:3 rank:133 A.Ternay String 欧拉降幂一下 但是反复求phi会超时 但mod是同一个就可以记忆化一下 #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ]; int len; map<ll, ll> mp; ll getphi(ll o) { if(mp[o]) return mp[o]; ll res = o; ll n = o; ; i * i <…
Solved:2 rank:306 跑路场..... A.PACM team 简单背包记录路径都写挂 退役算了 #include <bits/stdc++.h> using namespace std; ]; ]; ]; ]; ]; ][][][]; ]; int main() { int n; scanf("%d", &n); ; i <= n; i++) scanf("%d%d%d%d%d", &p[i], &a[i],…
Solved:1 rank:249 E. Removal dp i,j表示前i个数删除了j个且选择了第i个的答案 类似字符串的dp 预处理一下nex i_k即i后面k第一次出现的位置  就好转移了 #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ]; ][]; ]; ll dp[][]; int main() { int n, m, kk; while(~scanf("%d%d%d"…
题意:你有n块木头,每块木头有一个高h和宽w,你可以把高度相同的木头合并成一块木头.你可以选择一些木头消去它们的一部分,浪费的部分是 消去部分的高度 * 木头的宽度,问把n块木头变成恰好m块木头至少要浪费多少木料? 思路:把木头从高到第排序,设dp[i][j]为前i块木头合并成了j块木头的最小花费.因为从大到小排序,所以合并后最后一块木头的高度一定是合并前的第i块木头的高度.那么,容易得出dp转移方程:dp[i][j] = min(dp[k][j - 1] + cal(k, i)),其中cal(…