感觉没啥问题,但是不知道为啥wa了25个点,可不可以求个hack数据我自己调
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define all(x) x.begin(),x.end()
#define cy cout<<"Yes"<<endl
#define cn cout<<"No"<<endl
#define lc rt<<1
#define rc rt<<1|1
const int N=3e3+6,yyx=998244353;
int n,q;
int x,y,dp[N][N],sa[N],sb[N];
struct node
{
int id,a,b;
}e[N];
inline void solve(){
cin>>n>>x>>y;
for(int i=1;i<=n;++i) cin>>e[i].a>>e[i].b,e[i].id=e[i].a+e[i].b;
sort(e+1,e+1+n,[&](node i,node j){
if(i.id==j.id){
if(x<=y){
if(i.a==j.a) return i.b<j.b;
return i.a<j.a;
}
else{
if(i.b==j.b) return i.a<j.a;
return i.b<j.b;
}
}
else return i.id<j.id;
});
//for(int i=1;i<=n;++i) cout<<e[i].a<<" "<<e[i].b<<endl;
for(int i=1;i<=n;++i) sa[i]=sa[i-1]+e[i].a,sb[i]=sb[i-1]+e[i].b;
int ans=0,z=0;
int s1=0,s2=0;
for(int i=1;i<=n;++i){
s1=sa[i],s2=sb[i];
for(int j=0;j<=10000;++j){
dp[i][j]=dp[i-1][j];
if(j<=max(x,y)){
if(e[i].a<=e[i].b){
if(j>=e[i].a&&s2<=j) dp[i][j]=(dp[i][j],dp[i-1][j-e[i].a]+1);
//else if(j>=e[i].a&&s2>j&&s2-e[i].b<=j) dp[i][j]=(dp[i][j],dp[i-1][j-e[i].a]+1);
}
else{
if(j>=e[i].b&&s1<=j) dp[i][j]=(dp[i][j],dp[i-1][j-e[i].b]+1);
//else if(j>=e[i].b&&s1>j&&s1-e[i].a<=j) dp[i][j]=(dp[i][j],dp[i-1][j-e[i].b]+1);
}
//cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
}
ans=max(ans,dp[i][j]);
}
}
if(sa[ans]<=x&&sb[ans]<=y&&ans<n) ans++;
cout<<ans<<endl;
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
int _=1;
//cin>>_;
while(_--)
solve();
return 0;
}