首页 > Bookshelves
头像 __故人__
发表于 2020-11-16 21:02:11
题意 要求分成恰好 组,每组的权值为 。要求最大化 。 分析 和位运算有关系,我们就要想到拆位。由于是要最大化权值,所以我们肯定是要优先满足高位。而每一位独立,所以我们可以直接枚举位数。定义 表示前 个已经分成了 组,是否可以组成当前答案, 表示现在枚举的答案。那么转移为 。那么最后是 展开全文
头像 林思艺
发表于 2020-11-16 22:03:38
题意 你有 本书,每本书有一个权值 .你要将这 本书分到 个书架上,要求你分组之后的每组权值之和的按位与的值最大。 思路 位运算啊,按位考虑。贪心的从高位到低位的使得此位值为 。我们就可以枚举最后的答案,从大到小,然后依次 一下。我们设计 方程: 。表示在前 个分为了 组是否成立,最 展开全文
头像 DeNeRATe
发表于 2020-11-22 09:04:56
分析 有了位运算想到的一定是贪心因为答案从高位到低位贪心一定是最优的那么我们可以考虑判断当前答案是否可行设f[][]表示当前到了i个位置,分为了j组是否成立转移时枚举前一个位置,判断这一组是否为当前所需答案的超集即可时间复杂度: 温馨提示:本题数据范围似乎有问题,需要达到左移60位才可过(只移50位 展开全文
头像 sunrise__sunrise
发表于 2020-11-19 13:40:14
题目描述 Solution #include <bits/stdc++.h> using namespace std; #define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0) #define all(__vv_ 展开全文
头像 Kur1su
发表于 2020-11-23 09:05:39
Description 给出n个数字,要求分成k个连续的子数组,使得每一堆总和按位与的结果是最大的 Solution 思路:dp + 贪心,首先意识到要结果最大需要按位贪心,从高位往低位取。其次,关于某一位是否能够实现,可以用 dp 去解决。具体实现如下:令bool 变量 dp[i][d] 表示到第 展开全文
头像 lifehappy
发表于 2020-11-17 19:30:54
Bookshelves 按位贪心然后dp去验证,实在是太妙了,,, 从高到底,如果高位能选的话优先选高位(低位所有的都选上还是比它小),接下来就是dp验证当前解是否可行了,定义dp[i][j]表示用前i本书放在前j个书架上是否可以得到当前答案满足要求。 然后不断更新合法答案即可,整体复杂度 /* 展开全文
头像 Dear㉿You
发表于 2020-11-18 08:35:50
Bookshelves 题意 有本书,每一本书都有一个价值,现在在不改变书的顺序的条件下,把这本书分成段,设每一段的价值之和为 ,问sum [ 1 ] & sum [ 2 ] & sum [ 3 ] ....& sum [ k ] 的最大值 分析 1.因为是按位运算要求 展开全文
头像 issue是云哥的小迷×呀
发表于 2020-11-26 19:01:52
定义为前个书分成组的最大价值 这么转移是有后效性的 价值不是越大越好 观察到价值计算是与运算,可以一位一位单独考虑 比如,如果每组都能凑齐,那这一位上必然是 然后考虑能否凑齐,但是同时也要凑齐... 就这样一位一位去判断 还是比较显然的.... #include <bits/stdc++.h& 展开全文
头像 hnust_yangyanjun
发表于 2020-11-17 19:51:50
题意:给你一个长度为n的数组,请你按顺序分成k份,然后将每一份的和进行位与操作,求结果最大为多少? 思路:从高位到低位枚举结果,即如果加入该位后结果满足条件则将该位加入结果,否则舍弃该位。判断结果是否满足条件使用dp:dp[i][j]表示将前i个数分成j组是否满足条件;dp[i][j]=(dp[i] 展开全文
头像 熠丶
发表于 2020-11-17 16:45:23
思路 首先看到与运算立马想到和位运算有关 利用前缀和思想存连续的一段数的和 利用贪心的思想,最高到低枚举每一位,判断把这一位变1后是否满足(ps:枚举的那位尽可能大一点) 设dp[i][j]前i个物体被分为j组是否存在 代码 #include <bits/stdc++.h> usin 展开全文

等你来战

查看全部