题意:m种优惠,第i个优惠需要购买qi个物品 并且可以获得[0~2]个免费物品 免费物品价值不大于购买qi个物品中的最小值,每种优惠可以使用无限次.
n个物品 价值为a[i].问买n个物品需要的最小价钱? n,m,q[i]<=1e5,a[i]<=1e4.
当前价格最大的物品不能被免费赠送 只能直接购买,
n个物品 价值为a[i].问买n个物品需要的最小价钱? n,m,q[i]<=1e5,a[i]<=1e4.
当前价格最大的物品不能被免费赠送 只能直接购买,
选出最小的q[i],每次买当前前q[i]大件物品后 选2件最大免费即可.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5,mod=1e9+7;
int n,m,q[N],a[N];
int main()
{
cin>>m;
int mn=1e9;
for(int i=1;i<=m;i++)
scanf("%d",&q[i]),mn=min(mn,q[i]);
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
reverse(a+1,a+1+n);
int ans=0;
int cnt=0,st=1;
while(st<=n)
{
if(cnt<mn)
cnt++,ans+=a[st],st++;
if(cnt==mn)
{
int t=st;
while(t<=st+1&&t<=n)
t++;
st=t;
cnt=0;
}
}
cout<<ans<<endl;
return 0;
}