BZOJ4976:宝石镶嵌(DP&思维)】的更多相关文章

题目传送门:bzoj4976 不得不说这是道脑洞dp,思路真的清奇. 我们可以发现,虽然n很大,但是k只有100,这里面似乎隐藏了什么玄机. 我们可以发现,设总共有$ tot $个二进制位在这n个数中有出现过1,那么当$ n-k>=tot $时,所有二进制位都能取到,可以直接计算答案. 当$ n-k<tot $时,n最大只有116(因为宝石价值最大只有1e5<2^17),那么就可以随便dp一下:设$ f[i][j] $表示处理前$ i $个数,当前或运算结果为$ j $时,最多能选取多少…
Description 魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,...,w_n.他想把这些宝石镶嵌到自己的法杖上,来提升 法杖的威力.不幸的是,小Q的法杖上宝石镶嵌栏太少了,他必须扔掉k个宝石才能将剩下的宝石镶嵌上去.法杖的 威力等于镶嵌在上面的所有宝石的魔力按位做或(OR)运算的结果,请写一个程序帮助小Q做出最佳的选择,使得法 杖的威力最大. Input 第一行包含两个正整数n,k(2<=n<=100000,1<=k<=100,k<n),分别表示宝石的个…
[BZOJ4976]宝石镶嵌 Description 魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,...,w_n.他想把这些宝石镶嵌到自己的法杖上,来提升法杖的威力.不幸的是,小Q的法杖上宝石镶嵌栏太少了,他必须扔掉k个宝石才能将剩下的宝石镶嵌上去.法杖的威力等于镶嵌在上面的所有宝石的魔力按位做或(OR)运算的结果,请写一个程序帮助小Q做出最佳的选择,使得法杖的威力最大. Input 第一行包含两个正整数n,k(2<=n<=100000,1<=k<=100,k<…
一千八的题也不会做了呜呜呜 size[u]表示结点u下的叶子结点, 思维:可以想到一个子树对其父亲会有一个消耗值 考虑一个点如果是max,那么其最大值可以是size[u]-p,p是消耗值最小的子树 一个点如果是min,那么其最大值是size[u]-所有子树的消耗值之和 那么dp[u]表示结点u的最大值为size[u]-dp[u]+1 dp[u]表示结点u的消耗值 叶子结点的消耗值为1, max结点的消耗值为消耗值最小的子树 dp[u]=min(dp[v]) 那么这个结点的结果是size[u]-d…
传送门 题意: 有 n 个数 (1 ~ n) 分给了三个人 a, b, c: 其中 a 有 k1 个, b 有 k2 个, c 有 k3 个. 现在问最少需要多少操作,使得 a 中所有数 是 1 ~ n 的一个前缀: c 中所有数 是 1 ~ n 的一个后缀. 剩下的都在 b 手上. 每次操作可以让一个人手上的一个数给另一个人. 解: 简单 DP : 显然就是问你 把  1 ~ n 分成三段的最少花费. 你把 第一个人 最初拥有的数, 所在的桶 定义为 0: 第二个人的为1, 第三个人的为2.…
前言:蒟蒻太弱了,全打的暴力QAQ. --------------------- T1 小Z的求和 题目大意:求$\sum\limits_{i=1}^n \sum\limits_{j=i}^n kth\max(a_i,a_{i+1},\cdots ,a_j)+kth\min(a_i,a_{i+1},\cdots ,a_j)$.其中$kthmax$指第$k$大,$kthmin$指第$k$小. 听hs-black说是链表维护,时间复杂度是$O(nk)$.然而并不会做……听了听学长的讲解. 对于这类问…
D. Minimum Triangulation time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given a regular polygon with nn vertices labeled from 11 to nn in counter-clockwise order. The triangulatio…
题意:有一排颜色的球,每次选择一个球消去,那么这个球所在的同颜色的整段都消去(和消消乐同理),若消去k个,那么得分k*k,问你消完所有球最大得分 思路:显然这里我们直接用二位数组设区间DP行不通,我们不能表示出“合并”这种情况.我们先把所有小块整理成连续的大块. 我们用click(l,r,len)表示消去l到r的所有大块和r后len块和r颜色一样的小块的最大得分.那么这样我们可以知道,click(l,r,len)只有两种情况: 1.r直接和后面len全都消去 2.r带着len先和前面的一样的颜色…
题目链接 DESCRIPTION INPUT OUTPUT SAMPLE INPUT 2 3 2 3 5 7 3 10 3 5 7 SAMPLE OUTPUT 12 26 HINT 官方题解: 代码如下: #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; typedef long long LL; ]; ]; i…
原题链接 题意 有N个灯和M个开关,每个开关控制着一些灯,如果按下某个开关,就会让对应的灯切换状态:问在每个开关按下与否的一共2^m情况下,每种状态下亮灯的个数的立方的和. 思路1.首先注意到N<=50,M<=50,因此很容易想到状压: 2.考虑X^3,其中X就是每种状况下亮着的灯的数量: 3.如何解这个X^3?我们把它展开——X=x1+x2+x3+...+xn,其中xi是第i个灯的亮或暗状况:因此X^3=(x1+x2+x3+...+xn)*(x1+x2+x3+...+xn)*(x1+x2+x…