ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2.最大费用

2021-07-12 19:02:25  阅读:139  来源: 互联网

标签:费用 最大 int sum 样例 dfs leq long


2.最大费用
题面

题目描述

商场一共 \(n\) 个物品,第 \(i\) 件物品的价格为 \(a_i\),每件物品只能买一件,你手上有 \(m\) 块钱。

求最多支出多少钱。

输入格式

第一行两个整数 \(n,m\)。

接下来 \(n\) 个整数,表示 \(a_i\)。

输出格式

输出最多支出是多少钱。

样例

样例 1 输入

3 10
1 2 3

样例 1 输出

6

样例 2 输入

4 10
4 3 5 11

样例 2 输出

9

数据范围与提示

对于 \(10\%\) 的数据,\(n\leq 10\)。
对于 \(30\%\) 的数据,\(n\leq 20\)。
对于 \(60\%\) 的数据,\(n\leq 30\)。
对于 \(100\%\) 的数据,\(1\leq n\leq 40\)。

分析
  • 第一眼,Dp?
  • 第二眼,m多大?哦,原来没给
  • 那么 \(40\) 个数全部遍历找支出,需要 \(40!\) 次。
  • 那么折半搜索登场了
  • 将 \(n\) 个数分成两份,一份 \(1\sim \lfloor \frac{n}{2} \rfloor\),另一份 \(\lfloor \frac{n}{2} \rfloor + 1 \sim n\)。
  • 将两份中小于或等于 \(m\) 的情况全部用数组存起来。
  • 然后通过两份的各自一种情况相加,来得到小于等于 \(m\) 的最大值(如果不选那么那一份的情况为 \(0\))。
  • 最后,\(m\) 多大?
  • 不知道?那么开个 long long 不过分吧,毕竟也没有明示用高精。
Code
#include <bits/stdc++.h>
using namespace std;

const int N = 50;

long long n, m;
long long a[N], ans;
vector<long long> l, r;

void dfs(int st, int en, long long sum, vector<long long> &now) {
	if (sum > m) return;
	if (st > en) {
		now.push_back(sum);
		return;
	}
	dfs(st + 1, en, sum + a[st], now);
	dfs(st + 1, en, sum, now);
}

int main (void) {
	cin >> n >> m;
	for (int i = 1; i <= n; ++i) {
		cin >> a[i];
	}
	
	dfs(1, (n >> 1), 0, l);
	dfs((n >> 1) + 1, n, 0, r);
	
	sort(l.begin(), l.end());
	sort(r.begin(), r.end());
	
	int lr = r.size();
	for (int i = 0; i < lr; ++i) {
		int p = lower_bound(l.begin(), l.end(), m - r[i] + 1) - l.begin() - 1;
		if (p > 0) ans = max(ans, l[p] + r[i]);
	}
	
	cout << ans;
	
	return 0;
}

标签:费用,最大,int,sum,样例,dfs,leq,long
来源: https://www.cnblogs.com/Juro/p/15003402.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有