当前位置: 首页 > news >正文

wordpress漂亮手机网站模板下载中国wix网站制作公司

wordpress漂亮手机网站模板下载,中国wix网站制作公司,邯郸专业做网站多少钱,自学it做网站1.题目: 给你一个整数数组 rewardValues,长度为 n,代表奖励的值。 最初,你的总奖励 x 为 0,所有下标都是 未标记 的。你可以执行以下操作 任意次 : 从区间 [0, n - 1] 中选择一个 未标记 的下标 i。如果…

1.题目:

给你一个整数数组 rewardValues,长度为 n,代表奖励的值。

最初,你的总奖励 x 为 0,所有下标都是 未标记 的。你可以执行以下操作 任意次 

  • 从区间 [0, n - 1] 中选择一个 未标记 的下标 i
  • 如果 rewardValues[i] 大于 你当前的总奖励 x,则将 rewardValues[i] 加到 x 上(即 x = x + rewardValues[i]),并 标记 下标 i

以整数形式返回执行最优操作能够获得的 最大 总奖励。

示例 1:

输入:rewardValues = [1,1,3,3]

输出:4

解释:

依次标记下标 0 和 2,总奖励为 4,这是可获得的最大值。

示例 2:

输入:rewardValues = [1,6,4,3,2]

输出:11

解释:

依次标记下标 0、2 和 1。总奖励为 11,这是可获得的最大值。

提示:

  • 1 <= rewardValues.length <= 5 * 104
  • 1 <= rewardValues[i] <= 5 * 104

该作者解决方法:

不知道C语言要怎么建构bitset,看了其他人的解答后尝试用位运速加速。 假设有一个 bool 数组 dp。在每一次循环中,dp[rewardValues[i] + j] 可以由 dp[j] 转移而来,其中 j 为小于 rewardValues[i] 的非负整数。 为了加速运算并减少空间浪费,可以将 bool 数组改成 unsigned long long。 在C语言中,虽 bool 使用1bit,但最小寻址单位为1字节,所以占用1字节。 现在我们将数组声明成 unsigned long long,此时每次操作最多可以操作64个位元,也就是64个状态。 由于 rewardValues[i] 不一定为64的倍数,为了避免发生溢位的状况,必须将 dp[j] 所代表的64位元拆成两部分。 为了计算正确的下标,我们把 rewardValues[i] 用 index 与 digit 表示,其中 rewardValues[i] = 64 * index + digit:
index = rewardValues[i] / 64
digit = rewardValues[i] % 64
因此,对于每个下标 j,dp[j] 可拆成:
(dp[j] & ((1 << (64 - digit)) - 1)) << digit
dp[j] >> (64 - digit)
假设 rewardValues[i] = 65,那么:
index = 65 / 64 = 1
digit = 65 % 64 = 1
以 dp[0] 的 0 ~ 63 位为例,0 ~ 62 位可以移到 dp[index + 0] 中的 1 ~ 63 位,对应数字 65 ~ 127。而剩下的1个位则放入 dp[index + 1] 的第 0 位,这个过程通过或运算即可。
dp[index + j] |= (dp[j] & ((1 << (64 - digit)) - 1)) << digit;
dp[index + j + 1] |= dp[j] >> (64 - digit);
若 rewardValues[i] 为 64 的倍数可直接转移,不需拆分

代码:

int cmp(const void *a, const void *b)
{return *(int*)a > *(int*)b;
}int maxTotalReward(int* rewardValues, int rewardValuesSize)
{qsort(rewardValues, rewardValuesSize, sizeof(int), cmp);int size = rewardValues[rewardValuesSize - 1] / 32 + 2;unsigned long long dp[size], temp, mask;memset(dp, 0, sizeof(unsigned long long) * size);int index, digit;dp[0] = 1;for (int i = 0; i < rewardValuesSize; ++i) {index = rewardValues[i] / 64;digit = rewardValues[i] % 64;mask = digit ? (1ULL << (64 - digit)) - 1 : 0;for (int j = 0; j < index; ++j){if (digit) {dp[j + index] |= (dp[j] & mask) << digit;dp[j + index + 1] |= dp[j] >> (64 - digit);} else {dp[j + index] |= dp[j];}}if (digit) {temp = dp[index] & ((1ULL << digit) - 1);dp[2 * index] |= (temp & mask) << digit;dp[2 * index + 1] |= temp >> 64 - digit;}}for (int i = size - 1; i >= 0; --i) {if (dp[i])return 64 * i + 63 - __builtin_clzll(dp[i]);}return 0;
}

声明:来源力扣题解

作者:borane

链接:https://leetcode.cn/problems/maximum-total-reward-using-operations-ii/solutions/2805771/01bei-bao-wei-yun-suan-by-modest-nashdn2-svmq/

来源:力扣(LeetCode)

http://www.15wanjia.com/news/157290.html

相关文章:

  • 建设网站的会计分录正规赚佣金的平台
  • 怎么在建设银行网站挂号贵阳seo网站管理
  • 微信公众账号登录官网凌源网站优化
  • 广州网站开发水平广州亦客网络如何做一个平台
  • 怎么免费建自己的网站企业信息查询网
  • 浙江省住建厅网站计算机专业类哪个最好
  • 西部数码网站助手教程云计算培训费用多少钱
  • 南京市公共建设管理中心网站平乡网站制作
  • 上海网站建设开发抑郁症图片加时间生成器在线制作
  • 试用网站要怎么做官方网站怎么查询
  • 申请免费个人网站和域名多说wordpress插件
  • 青岛企业网站建站模板梵克雅宝官网官方网
  • 网站建设 中企动力西安二维码制作免费
  • 网站建设的具体流程最近国际时事热点事件
  • 个人网站要备案么做程序员需要什么条件
  • 睢宁做网站公司网页设计颜色代码表
  • 东莞高端建站公司免费网站建设服务
  • 天元建设集团有限公司技术中心经理怎样做网站后台优化
  • 网站建设实训课怎么开发网页
  • 合肥百度 网站建设免备案cdn
  • 帮助做问卷调查的网站个人不允许建网站
  • 西安专业做网站建设黄山旅游攻略自由行
  • 福建做网站的公司深圳网站建设公司乐云seo
  • 网站后台显示连接已重置wordpress 分类标签云
  • 网站开发合同范本网页设计培训 多少钱
  • 做视频网站php 7.0 wordpress
  • 兰州市建设工程安全质量监督站网站门户网站后台管理系统
  • 网站建设的销售术语河南省建设厅专家库
  • 兖州网站建设推广湘潭学校网站建设 精诚磐石网络
  • 定制网站开发都提供那些东西企业网站尺寸