我拿一个本来思路错误的贪心写的,结果爆 0,然后 −1 就过了……
#include<bits/stdc++.h>
using namespace std;
struct node{
int times,vis;
}b[15];
int n,m,k,r,a[15];
bool cmp(node x,node y){
if(x.times!=y.times){
return x.times<y.times;
}
return x.vis>y.vis;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m>>k>>r;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=m;i++){
cin>>b[i].times;
}
for(int i=1;i<=m;i++){
cin>>b[i].vis;
}
sort(b+1,b+n+1,cmp);
int tot=0,ti=0;
for(int i=1;tot<k;i++){
tot+=b[i].vis,ti+=b[i].times;
}
int ans=0,u=r-ti;
for(int i=1;i<=n;i++){
if(u>=a[i]){
ans++;
}else{
break;
}
}
cout<<ans-1;
return 0;
}
求大佬解答。