AcWing171.送礼物
创始人
2024-05-30 02:38:23
0

题目描述

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

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

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

输入格式

第一行两个整数,分别代表 WWW 和 NNN。

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

输出格式

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

数据范围

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

输入样例

20 5
7
5
4
18
1

输出样例

19

思路

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

代码

#include 
#include 
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;
}

相关内容

热门资讯

灿辉·晶萃173美学样板间品鉴... (转自:上海楼市情报)7月2日,徐泾一场美学样板间的媒体品鉴会,揭开了大虹桥高端人居新纪元。在无数期...
2025年第二批IPO现场检查...   来源:投行最前线  7月3日,中国证券业协会公布了2025年第二批IPO现场检查名单,本次共抽查...
时政微观察丨青年大有可为   7月2日,中华全国青年联合会第十四届委员会全体会议、中华全国学生联合会第二十八次代表大会隆重开幕...
人乐退:公司股票将在7月4日被... 上证报中国证券网讯(记者骆民)人乐退公告,公司股票已被深圳证券交易所决定终止上市。公司股票于2025...
天航一客机滑行时发出巨响,乘客... 7月2日,有网友发视频称,从呼和浩特飞往乌海的天津航空 GS7833次航班飞机在滑行时发出一声巨大声...
持牌消金转型深水区:上半年19... 中经记者 郑瑜 北京报道在宏观经济持续推动消费复苏的背景下,消费金融被认为是金融服务与实体消费的关键...
黄河再添新大桥!宁夏中卫黑山峡... 原标题:黄河再添新大桥!宁夏中卫黑山峡黄河大桥主桥顺利合龙来源:人民日报客户端7月3日,随着最后一块...
化解跨国企业数据本地化痛点 辉... 中经记者 谭伦 上海报道随着AI与云技术的演进融合,在全球企业加速数字化转型的浪潮中,数据基础设施建...
润欣科技:截至6月30日公司的... 证券日报网讯润欣科技7月3日在互动平台回答投资者提问时表示,截至6月30日,公司的股东人数是83,4...
美元人民币盘中上涨102点 07月03日消息,美元人民币盘中上涨102点,涨幅0.14%,截止20:48,报7.1724。