样例全过butWA0求条

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,w,k,ans;
struct node{
	int a,b;
}a[100005];
bool cmp(node a,node b){
	if(a.b==b.b) return a.a>b.a;
	return a.b<b.b;
}
signed main(){
	cin>>n>>w>>k;
	for(int i=1;i<=n;i++) cin>>a[i].a>>a[i].b;
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=k;i++){
		if(w>=a[i].b){
			w-=a[i].b;
			w+=a[i].a;
			ans+=a[i].a;
		}
	}
	cout<<ans;
	return 0;
}

有没有大佬帮忙调一下。

1 个赞

\color{red}{WA20}

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,w,k;
struct node{
	int a,b;
}a[100005];
bool cmp(node a,node b){
	if(a.b==b.b) return a.a>b.a;
	return a.b<b.b;
}
signed main(){
	cin>>n>>w>>k;
	for(int i=1;i<=n;i++) cin>>a[i].a>>a[i].b;
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=k;i++){
		if(w>=a[i].b){
			w-=a[i].b;
			w+=a[i].a+a[i].b;
		}
	}
	cout<<w;
	return 0;
}
1 个赞

\color{green}{AC}
@Dalton 关帖。
核心代码:

for(int i=1,j=1;i<=k;i++){
	for(;j<=n&&a[j].b<=w;j++) que.push(a[j].a);
	if(que.empty()) break;
	w+=que.top();
	que.pop();
}
1 个赞