P8444 题解
题目传送门
题目思路
此题就是一道简单的贪心,先从小到大排序(也可以从大到小),取能买的起的最贵的物品。
找到后从小到大遍历,求能买的起的价值最高的的物品最多能换到多少其他的物品,用一个计数器计数,最后输出这个计数器的值就行了。
代码
#include<bits/stdc++.h>
#define int long long //a[i]的范围很大,要开long long
#define N 1000010
using namespace std;
typedef long long ll;
int read()
{
int x = 0,f = 1;
char c = getchar();
while(c<'0' || c>'9')
{
if(c=='-') f = -1;
c = getchar();
}
while(c>='0' && c<='9')
{
x = (x<<3)+(x<<1)+(c^48);
c = getchar();
}
return x*f;
}//快读
int a[N];
signed main()
{
int n=read();
for (int i=1;i<=n;i++)
a[i] = read();
int w=read(),k=0;
sort(a+1,a+n+1); //从小到大排序
for (int i=n;i>=1;i--)
{
if (w>=a[i])
{
k = a[i];
break;
}
}//求能买的起的最贵的物品
int ans = 0;//定义一个计数器,初始值为0
for (int i=1;i<=n;i++)
{
if (k>=a[i])
{
ans++;//计数器+1
k -= a[i];
}
}//求能买的起的价值最高的的物品最多能换到多少其他的物品
cout << ans << endl;//输出计数器的值
return 0;
}