help!
查看原帖
help!
669053
Strelizia_楼主2025/7/23 18:57
#include<bits/stdc++.h>
using namespace std;
const int N=2010;
int a[N],b[N];
int f[N];
int c[4];
int pos1[N],pos2[N];
bool cmp1(int i,int j){
	return a[i]<a[j];
}
bool cmp2(int i,int j){
	return b[i]>b[j];
}
int main(){
	int n;
	cin>>n;
	cin>>c[1]>>c[2]>>c[3];

	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
		f[i]=a[i]*c[1]+b[i]*c[2];
	}
	int ans=0;
	for(int i=1;i<=n;i++) pos1[i]=i;//初始化很重要
	sort(pos1+1,pos1+n+1,cmp1);
	for(int i=1;i<=n;i++){//枚举a0
		priority_queue<int>q;//大根堆
		int a0=a[pos1[i]];
		for(int j=i;j<=n;j++) pos2[j]=pos1[j];
		sort(pos2+i,pos2+n+1,cmp2);//降序排序b
		for(int j=i;j<=n;j++){//枚举b0
			q.push(f[j]);//在枚举b的时候把当前的加入,因为大根堆内的只能有比b大的梨子
			int b0=b[pos2[j]];
//			cout<<a0<<" "<<b0<<"*\n";
			int k=a0*c[1]+b0*c[2]+c[3];//k是降序的
			while(!q.empty() && q.top()>k)q.pop();//把再也不可能合法的剔除
			int s=q.size();
			ans=max(ans,s);
		}
	}
	cout<<ans;
	return 0;
}

WA 0求救

2025/7/23 18:57
加载中...