[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 考虑r最后的二进制形式为 1xxxxx 那么我们肯定想让第一个最高位的1保留. 因此我们选取的另外一个数字 一定是 0xxxxx的形式. 那么我们贪心地选取数字b=01111..1 然后看看这个数字b是否大于等于L 如果满足,显然它也是满足小于等于R的. 那么我们选取的a=100000..0 那么结果显然就是最大的了.为11111...11 但是 如果b<L 那么我们就显然不能满足最后的结果第一位是1了. 所以b的第一位也只能是…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] f[i][j][k]前i个位置,第i个位置放j这个颜色,然后形成了k个联通块的最小花费 分第i个位置有没有已经放颜色两种情况考虑. 如果有放的话.枚举前一个位置的颜色以及前i-1个位置形成的联通块的数目 如果没有放的话.枚举当前以及前一个的颜色以及前i-1个位置形成的联通块数目 有放不用加代价. 没有放的话加上放的代价就会. 最后在f[n][1..m][k]里面找最小值 [代码] #include <bits/stdc++.h>…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 很显然只要维护B,R,G的数量就好了. 可以很容易想到一个dfs(int a,int b,int c) 然后如果a+b+c==1,那么让其中为1的对应的颜色标记为可以得到就好 变换就是a-1,b-1,c+1和a-1,c-1,b+1以及b--,c--,a++以及a-1,b,c和a,b-1,c和a,b,c-1 然后加一个记忆化搜索吧.. [代码] #include <bits/stdc++.h> #define LL long l…
D. Robot Rapping Results Report 题目连接: http://www.codeforces.com/contest/655/problem/D Description While Farmer John rebuilds his farm in an unfamiliar portion of Bovinia, Bessie is out trying some alternative jobs. In her new gig as a reporter, Bessi…
题目链接: D. Robot Rapping Results Report time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output While Farmer John rebuilds his farm in an unfamiliar portion of Bovinia, Bessie is out trying some alt…
[链接] 我是链接,点我呀:) [题意] 让你确定一个最小的k 使得1..k这些比赛的结果能够推导出所有人之间的实力大小 [题解] 如果关系越多.那么就越能确定所有人之间的大小关系. (多一点也能唯一确定.不嫌多 那么就二分一下k. 做一个拓扑排序. 如果能做唯一的拓扑排序.那么就ok 否则返回false. [代码] #include <bits/stdc++.h> #define LL long long #define rep1(i,a,b) for (int i = a;i <=…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 第i只动物如果饲养它的话. 代价是固定的就是(n-i+1)a[i] 所以相当于给你n个物品,每个物品的重量为(n-i+1)a[i],价值为1 背包容量为x 问你最大价值是多少. 但因为价值是单位价值. 所以直接重量小的优先选就好了. 不够了就停止. [代码] #include <bits/stdc++.h> #define LL long long #define rep1(i,a,b) for (int i = a;i &l…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 给你一棵树. 让你统计其中子树T的数量. 这个子树T要满足最大值和最小值之差小于等于d 树形DP 可以枚举点root为子树的根. 统计以root为根的子树的个数. 根据每个儿子节点选或者不选. 如果选.则看看它是否满足以下条件: 权值小于等于根节点的权值. (等于根节点的时候,要求该节点的标号<根节点的标号,不然会重复计数) 然后假设当前是枚举的第i个儿子 那么cnt表示的是这个根节点和前i-1个节点能形成的满足子树(是一个联通…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每一位显然只要取1..60这些数字. 然后需要保证每个这些数字里面,每个数字所用到的质因子都它所唯一拥有的.别人不能用 因为如果别人用了的话.gcd就不为1了. 因此我们肯定需要记录这些数字的质因子使用情况. 如果第i个位置枚举的数字,它里面的某个质因子,之前用过了.那么这个数字就不能用. 否则还可以用. 只需取前16个质数就能够表示1..60这些数字了 (其实只要取到58就好了,所以59这个质数不用,因为选59和选1的代价是一…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 给一个森林. 就是由很多棵树组成.. 然后会询问你其中一棵树的最长链. 初始状态的最长链可以用两遍dfs分别找最长路得到. 然后要求你支持合并. 且合并过后. 新的树的最长链尽可能短. 这个合并的过程可以用并查集来表示. 给并查集添加一个变量value 表示这个并查集形成的树的最长链. 两个树合并. 最优的方法就是分别取最长链上的中点. 这样得到的新的树的最长链才可能最短. 新的最长链的长度在value[x],value[y],…