【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),分别表示宝石的个…
Online Judge:YCJSOI Label:Dp,思维题,预处理,滚动优化 题目描述 乐乐现在掌管一个大公司,办公楼共有n层.为了增加员工的身体素质,他决定在每层楼都建立一个活动室,活动室分乒乓球和排球两种. 已知每层楼喜欢乒乓球和排球的人数. 每个人的行走楼层数是他去自己喜欢的运动室的楼层数. 请你帮乐乐算算,每层楼应该建乒乓球还是排球,使得所有人行走楼层数总和最小. 输入 第一行一个整数n,表示楼层数量. 接下来n行 ,每行两个整数a和b,表示喜欢乒乓球和排球的人数. 输出 输出一个…
原文链接 https://www.cnblogs.com/cly-none/p/CSA49F.html 题意:Alice和Bob在玩游戏.有\(n\)种卡牌,每种卡牌有\(b_i\)张,保证\(\sum b_i\)为偶数.现在,Alice要把所有卡牌任意平分为2份(仅要求每份卡牌数为\(\frac {\sum b_i} {2}\)),并对每份分别进行一次游戏.第一次游戏由Alice先手,第二次由Bob先手. 每次游戏中,Alice和Bob会轮流取走一张卡牌直到取尽.设最后Alice有\(n_i\…
链接:https://ac.nowcoder.com/acm/contest/369/A 题目描述 若你摘得小的星星 你将得到小的幸福  若你摘得大的星星 你将得到大的财富  若两者都能摘得 你将得到永远的愿望  摘星是罪孽的宽恕 摘星是夜晚的奇迹  抓住它吧 你所期望的那颗星 无法触及,因而耀眼   明明触及了,却还是耀眼 ——<少女☆歌剧 Revue·Starlight> 题目描述 "我明白." 作为这命运剧场永远的观众,小D一直注视着这片星光璀璨的舞台,舞台上,少女们…
题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全部元素的和可以被3整除,问有多少种方法构建出该数组.答案模1000000007 例 输入 2 1 3 输出 3 note:满足的情况只有[1,2],[2,1],[3,3] 解题思路:用dp[i][j]表示长度为i的数组,元素大小在[L,R]之间,并且元素和模3的余数为j的方案数,我们可以计算出[L,…
https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为位置$i$处的$F$复位所花费时间, 有 $dp[i] = max(dp[i-1]+1,cnt_i)$, $cnt_i$为前$i$位$M$的个数 $dp$最大值即为答案 #include <iostream> #include <algorithm> #include <cstd…
Codeforces 822C Hacker, pack your bags!(思维)   题目大意:给你n个旅券,上面有开始时间l,结束时间r,和花费cost,要求选择两张时间不相交的旅券时间长度相加为x,且要求花费最少. #include <bits/stdc++.h> using namespace std; typedef long long ll; const int INF = 0x3f3f3f3f; ; ; ; struct node { int l;int r;int cs;…
显然被留下的宝石应该贡献至少一位,否则就可以扔掉.所以如果n-k>=logw,直接输出所有数的or.现在n变得和k同阶了.于是设f[i][j]为前i个数or为j时至少选几个数,转移显然.当然可以只开一维. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using…
题目大意: 把一个字符串s分割成m个串,这m个串满足至多有一种字符出现次数为奇数次,其他均为偶数次,问m的最小值 题解: 首先我们想一下纯暴力怎么做 显然是可以n^2暴力的,然后dp[i]表示分割到i的所用最少的串个数 接下来就是枚举所有可行的j,使得dp[j]转移到dp[i]. 虽然可以暴力找,但是如果使用暴力找,则后续就无法优化了,这里就用到了异或的思想 用一个26位的int数组a[i]表示从1到i的状态,第j位为1代表这个字母出现了奇数次,反之为偶数次. 那么区间[l, r]是否可行,就是…
点此看题面 大致题意: 给你一张无向图,每个点权值为\(0\)或\(1\),多组询问两点之间是否存在一条回文路径. 暴力\(DP\) 首先,看到\(n\)如此之小(\(n\le5000\)),便容易想到一个\(O(m^2)\)的暴力\(DP\). 我们用\(f_{i,j}\)表示\(i\)与\(j\)两点之间是否存在一条回文路径. 初始化,\(f_{i,i}=1,f_{i,j}=1(s_i=s_j)\),即分别预处理最短的奇数长度回文路径和偶数长度回文路径. 然后我们把所有\(f_{i,j}=1…
http://hihocoder.com/problemset/problem/1496 题意:中文. 思路:一开始做有一种想法,把所有的数都变成二进制后,最优的情况肯定是挑选所有数中最高位的1能同时有一个以上的数. 例如样例2可以化成: 001 010 100 101 那么肯定挑选最高位的1(第三位)并且有一个以上的数更优,如果没有一个以上那么与之后会变成0. 那么对于这一位应该如何挑选. 一开始想着只挑选最大的两个,但是造出下面的样例: 1001000 1000110 1000110 这样的…
题目链接:http://codeforces.com/contest/822/submission/28248100 题解:多维的可以先降一下维度sort一下可以而且这种区间类型的可以拆一下区间只要加一个标记就知道这是开始区间还是结束区间具体看一下代码. #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #define inf 1000000000000…
题目链接:http://codeforces.com/contest/233/problem/D 题意:问在n*m的矩阵中满足在每一个n*n的矩阵里画k个点,一共有几种画法. 题解:其实这题挺简单的但是有一个优化要注意一下,接下来将一下这题的解法. 拿一个连续长度为n的块.1,2将其分成3部分第一部分为第一列a,第二部分为中间重合的部分,第三部分为最后一列c设Si表示,第i列一共有几个点. 显然Sa=Sc于是乎便有思路了吧,所有可能性就是1-n的C(n,k)^cnt(cnt是m/n or m/n…
点此看题面 大致题意: 有\(n\)个路灯,每个路灯有一定的建造费用,且建成后可照亮自身及周围距离为\(1\)的两个格子.你可以交换\(k\)次两个路灯的建造费用,求照亮所有格子的最小费用. 题意转换 首先可以发现交换显然是一个有后效性的操作,难以记录到状态中. 但是\(k\)这么小似乎别有深意? 考虑我们把一次交换分裂成两个操作,即在某一无需建路灯的位置额外建了一个路灯,和在某一需建路灯的位置免费建了一个路灯. 这样就容易\(DP\)了. 动态规划 考虑先把费用都向右移一位,再把第一个位置的费…
题目链接:https://codeforces.com/contest/1119/problem/E 题意:有n种长度的棍子,有a_i根2^i长度的棍子,问最多可以组成多少个三角形 题解:dp[i]表示前 i 种棍子可以组成的最大三角形数量,f[i]表示没有用到的棍子数量,三角形的形状只有两种(2 ^ i, 2 ^ i, 2 ^ i)或者(2 ^ i, 2 ^ i, 2 ^ j),显然先用之前剩下的来组三角形最优,然后就可以转移了. #include <bits/stdc++.h> using…
1045 Favorite Color Stripe (30 分)   Eva is trying to make her own color stripe out of a given one. She would like to keep only her favorite colors in her favorite order by cutting off those unwanted pieces and sewing the remaining parts together to f…
Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given an array aa consisting of nn integers. Beauty of array i…
题目描述: 求序列A,B的公共子序列个数: 基本思路: 想到了dp,选的状态也对,但是就是就是写不出状态转移方程,然后他们都出了,到最后我还是没出,很难受,然后主要是没有仔细考虑dp[i][j],dp[i][j-1],dp[i-1][j],dp[i-1][j-1]在A[ i]和B[i]在相同和不相同是的数量关系,我为啥就没想到要减呢,只想着怎么把他们加起来,着实智障: 定义状态dp[i][j]为序列A扫到i,序列B扫到B时候的公共子序列个数,状态转移方程如下: 其实这个状态转移方程也没那么好证明…
\(首先很容易想到一个O(n^4m)的DP\) \(设dp\ [i]\ [j]\ [q]\ 为长度i,a数组以j结尾,b数组以q结尾(q>=j)\) for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) dp[1][i][j]=1;//初始化长度为1的时候 for(int i=2;i<=m;i++) for(int j=1;j<=n;j++) for(int q=j;q<=n;q++) for(int w=1;w<=j;w++)/…
题目链接 题目大意 给你一个数字n和长为n-1个字符串 字符串包含'<','>' 若s[i]='<' 则代表a[i]<a[i+1] 若s[i]='>' 则代表a[i]>a[i+1] 你要构造一个长度为n的全排列,使其满足条件 求方案数mod 1e9+7 题目思路 这个问题主要就是不知道如何保证自己构造的数组是一个全排列 又是一个神仙dp, 设\(dp[i][j]\)代表[1,i]为全排列,且第i个元素为j 那么该怎么转移. 若为'<' \(dp[i][j]=\su…
题目链接 题目大意 给你一个数k和n,表示用n个\(1/2^i(i=0,1,2.....)\)组成k有多少种方案数 题目思路 这个dp实属巧妙 设\(dp[i][j]表示i个数构成j\) 这i个数可以分为两种第一种为有1,第二种为无1 有一则可以直接从\(dp[i-1][j-1]\)转移 无一则可以从\(dp[i][2*j]\)让这i个数全部除以二即可 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; c…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5981 题意:A在[L, R]之间随机选取一个数X,之后B来猜这个数,如果猜的数比X小,那么A就告诉B猜小了,如果猜的数大于X,那么以后A永远只会回答B是否猜对了,问在最坏的情况下B至少要猜多少次,并求出有多少种方案. 题解:参考自:https://blog.csdn.net/jaihk662/article/details/77435217     补充关于猜测次数的理解:如果第一次猜测的数大于等于…
传送门题目:https://www.luogu.org/problem/show?pid=1541 其实这道题想到了就很简单,但很难想到用思维的dp,这非常少见. 看到每张牌不超过40张,这数据范围就是给你开思维dp的 自然想到用dp[ i ][ j ][ k ][ l ]表示用了i张1,j张2,k张3 , l 张4的最大值 用i张1,j张2,k张3 , l 张4自然跳到了 第(1+i+2*j+3*k+4*l)格,枚举四种情况,再加上第(1+i+2*j+3*k+4*l)格的值就行了 //Gang…
貌似开坑还挺好玩的...开一个来玩玩=v=... 正好自己dp不是很熟悉,就开个坑来练练吧...先练个50题?小目标... 好像有点多啊QAQ 既然是开坑,之前写的都不要了! 50/50 1.洛谷P3399 丝绸之路 简单的线性dp 点我看题 因为是开坑所以题意就不讲了,自己看题吧,一些题意比较迷的会讲一下. 这题其实还挺简单的. 设 f[i,j] 表示到第 i 个城市用了 j 天所需要的最小疲劳值. 很快dp方程就出来了.  f[i,j]=min(f[i,j-1],f[i-1,j-1]+d[i…
P1004 方格取数 思路如下 这题是看洛谷大佬的思路才写出来的,所以我会把大佬的思路展示如下: 1⃣️:我们可以找到一个叫思维dp的东西,dp[i][j][k][l],其中前两维表示一个人从原点出发到(i,j)的路线,而后两维表示:另外一个人从原点出发到(k, l)的路线,通过这个四维的数组,我们就可以暴力的模拟出每个所走的路线. 2⃣️:其次我们思考…
DP复习 集训%你赛2:测绘(审题DP) 经过2000+个小时的努力终于把这道题做出来的蒟蒻通 分析: 这道题我一直没做出来的原因就是因为我太蒟了题面看不懂,题面读懂了,其实不是特别难. 题目翻译: 你从1~n中选k个数,使得误差值小于E.求最少的k. 这里的k都是1~n之间的数字,什么M[]的S[]的先忽略不管他. 现在就是你有n天的数据,你从中选k天,使得这些天的数据与总数据的误差值小于E,找最少的k. 然后通过一些奇怪的方法求出你选的k天的误差值,就ok了. 然后我们开始定义DP数组 dp…
链接 [https://codeforces.com/contest/1105/problem/C] 题意 给你n,表示数组长度,元素的值是l到r,问有多少种方案使得所有元素和整除3 分析 思维dp,看代码吧 代码 #include<bits/stdc++.h> using namespace std; #define ll long long const ll mod=1e9+7; const int N=2e5+10; ll dp[N][3];//dp[i][j]表示l,r这个区间内i个数…
Codeforces题号:#340E 出处: Codeforces 主要算法:思维+DP 难度:4.8 题意: 有一个长度为$n$的排列(即各元素互不相同),其中有一些为-1.现要求将数填到这些-1上,使得原排列是一个错位排列.问有几种方法? 思路分析: 又是一道超级难的DP…… 这不就是一个错排的模板题吗?不是只要看有几个-1就做多少的错排吗?确实,样例很不良心,那就给你一组反例吧…… 5 -1 -1 2 3 -1 我们注意到了,并不是剩下的元素全是错排.因为原来我们认为2不能处在2的位置,但…
NOI Online 2022 一游 TG 啊,上午比提高,根据去年的经验,题目配置估计那至少一黑 所以直接做 1 题即可.(确信) 总体:估分 140,炸了但没完全炸 奇怪的过程 开题:3 2 1 (雾 事情是这样的:我又根据经验,觉得 T1 不会太简单... 突然发现 T3 和 T2 似乎可做,恩?然后 T3 搞半天发现一个需要 cdq 的神奇东西 果断放弃. 接着看 T2 ,好吧,不知脑子如何灵光,我越看越像字符串? 这也是往年经验:去年考的字符串,今年可能还考. 折腾了 0.5h 的自动…