T292113 [传智杯 #5 练习赛] 平等的交易

吐槽一下
是我理解能力太差劲了吗?这题当时做的时候真没读懂,整的跟阅读理解似的2333,个人感觉这题出的不好。。

言归正传:
这题思路很简单,就是想让你先拿你的钱,必须买一件,之后用这一件尽可能多的去换别的物品。求可换得的最大的物品件数。

用贪心思想尽可能的让第一件的价格最大,之后从小到大遍历数组,求价值和与w比较,并记录个数

题目描述:
你有 n 件道具可以买,其中第 i件的价格为 ai

你有 w 元钱。你仅能用钱购买其中的一件商道具。当然,你可以拿你手中的道具换取其他的道具,只是这些商道具的价值之和,不能超过你打算交换出去的道具。你可以交换无数多次道具。道具的价值可能是 0,但是你不能使用空集换取价值为 0 的商品。

请问,在这个条件下,最多可以换取多少件道具?

输入格式
第一行一个正整数 n,表示道具个数。

接下来一行 n个正整数,表示 {an}

接下来一行 1 个正整数,表示 w。

输出格式
一个正整数,表示答案。

上代码:

#include
#include
using namespace std;

const int N = 1000010;
int a[N];
int n, w;
int f[N];

int main(){
	
	cin >> n;
	
	for(int i = 0;i < n;i ++) cin >> a[i];
	
	cin >> w;
	
	sort(a, a+n);
	
    for(int i = n-1;i >= 0;i --)
        if(a[i] <= w){
            w = a[i];
            break;
        } 
     
	
	int ans = 0;
	for(int i = 0;i < n;i ++){
		if(w-a[i] >= 0) ans ++, w -= a[i];
	}
	
	cout << ans << endl;
	return 0;
}

你可能感兴趣的:(算法总结,算法,c++,贪心算法)