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

AcWing171.送礼物

题目描述

达达帮翰翰给女生送礼物,翰翰一共准备了NNN 个礼物,其中第 iii 个礼物的重量是 G[i]G[i]G[i]

达达的力气很大,他一次可以搬动重量之和不超过 WWW 的任意多个物品。

达达希望一次搬掉尽量重的一些物品,请你告诉达达在他的力气范围内一次性能搬动的最大重量是多少。

输入格式

第一行两个整数,分别代表 WWWNNN

以后 N 行,每行一个正整数表示 G[i]G[i]G[i]

输出格式

仅一个整数,表示达达在他的力气范围内一次性能搬动的最大重量。

数据范围

1≤N≤461 \le N \le 461N46
1≤W,G[i]≤231−11 \le W,G[i] \le 2 ^ {31} - 11W,G[i]2311

输入样例

20 5
7
5
4
18
1

输出样例

19

思路

由于取得方法有2462^{46}246(70368744177664)种,肯定超时。但如果将其分成两组,每组就只有2232^{23}223(8388608)种,这就可以过了。先将第一组可能组成的数存入数组(要去重,不然TLE),然后再枚举第二组,枚举到一个数就二分搜索与第一组可以组成最大的数。

代码

#include <iostream>
#include <algorithm>
using namespace std;int n, w, k;
int a[50];
int pp[16777216], p[16777216], cnt, cnt1, ans;bool cmp(int x, int y)
{return x > y;
}void dfs1(int step, int last) 
{if (step == n / 2) {pp[cnt++] = last;return;}if ((long) last + a[step] <= w) dfs1(step + 1, last + a[step]);dfs1(step + 1, last);
}void dfs2 (int step, int last) 
{if (step == n) {int l = 0, r = cnt - 1;while(l < r) {int mid = (l + r + 1) / 2;if ((long) p[mid] + last <= w) l = mid;else r = mid - 1;}if ((long) p[l] + last <= w) ans = max(ans, p[l] + last);return;}if ((long) last + a[step] <= w) dfs2(step + 1, last + a[step]);dfs2(step + 1, last);
}int main() {cin >> w >> n;for (int i = 0; i < n; i++) cin >> a[i];sort(a, a + n, cmp);k = n / 2;dfs1(0, 0);sort(pp, pp + cnt);int cnt1 = cnt;cnt = 0;for (int i = 1; i <= cnt1; i++){if (pp[i] != pp[i - 1]) p[++cnt] = pp[i];}dfs2(n / 2, 0);cout << ans << endl;return 0;
}
http://www.lryc.cn/news/32882.html

相关文章:

  • 领域驱动设计-架构篇
  • docker安装kafka
  • Selenium4+Python3系列(十一) - Page Factory设计模式
  • C++基础知识【4】函数及参数
  • 约瑟夫森磁效应
  • 什么是L1和L2正则化,以及它们有什么区别
  • 场景式消费激发春日经济,这些电商品类迎来消费热潮
  • [2.1.4]进程管理——进程通信
  • ChatGPT也有犯晕的时候
  • 机器学习与目标检测作业:连通块算法
  • HBase基础 --- 增删查改
  • 如何基于AI智能视频技术实现公园景区的人流量实时统计?
  • 【JavaWeb】Servlet详解
  • 谁是世界上最好的编程语言?--编程语言70年浅谈
  • Webpack前端资源加载/打包工具
  • springcloud3 fegin实现服务调用1
  • 专业版即将支持自定义场景测试
  • Process Monitor工具使用实验(23)
  • 钓鱼客服到拿下服务器全过程(重点在于钓鱼添加img src)
  • 【C++】list迭代器的深度剖析及模拟实现(感受类封装,类和对象的思想)
  • JavaScript 语句、注释和代码块实例集合
  • 华为机试题:HJ103 Redraiment的走法(python)
  • html+css 实现 熊猫样式
  • Vue基础19之插槽
  • [Gin]框架底层实现理解(一)
  • css3横向无限公告消息滚动功能
  • 【Git】Git工作流程及使用
  • 降本增效,合作伙伴营销助力业绩增长
  • 【独家】华为OD机试 - 运动会(C 语言解题)
  • 【每天学习一点新知识】JNDI注入