原題連結
題解
1.操作1肯定選最小的
2.操作2不在乎數的大小
3.因此我們可以優先實施操作1,然後再實施操作2
code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
ll a[N];
ll n,m,k,x;
int main(){
cin>>n>>m>>k>>x;
for (int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
ll ans=min((m/x),n/k)*k;
for(ll i=1;i<=n;i++)
{
m-=a[i];
if(m<0) break;
ans=max(ans,i+min((m/x),(n-i)/k)*k);
}
cout<<ans;
return 0;
}