题目描述 有一家餐馆有k张桌子,第i张桌子最大可以坐下Ri个人。现在来了n伙顾客,第 i 群顾客共有Ci个人,将会带来收益Pi。每张桌子只能安排一群顾客,而且同一群顾客都要坐在一张桌子上。问接受哪几群顾客,并分别安排在哪几张桌子可以带来最大的收益。
输入格式 第一行包含一个整数n(1<=n<=1000)。
接下来有n行,每行有两个整数ci,pi。
接下来一行一个整数k(1<=k<=1000)。
最后一行包含k个整数r1..rk。
输出格式 输出一个数,表示最大的收益
样例输入 3
10 50
2 100
5 30
3
4 6 9
样例输出 130
时空限制 2s,512M
可以帮我看一下我的代码有什么问题吗?急
#include<bits/stdc++.h>
using namespace std;
const int maxn=1005;
struct Node{
int x;
int y;
int z;
}a[1005];
struct Node1{
int x;
int r;
int vis;
}b[1005];
struct Node2{
int a;
int b;
}ans[1005];
bool cmp(Node i,Node j){
if(i.z==j.z){
return i.y<j.y;
}
return i.z>j.z;
}
bool cmp1(Node1 i,Node1 j){
return i.r<j.r;
}
int main(){
int n,k;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&a[i].y,&a[i].z);
a[i].x=i+1;
}
scanf("%d",&k);
for(int i=0;i<k;i++){
b[i].x=i+1;
b[i].vis=0;
scanf("%d",&b[i].r);
}
sort(a,a+n,cmp);
sort(b,b+k,cmp1);
int cnt=0,sum=0;
for(int i=0;i<n;i++){
for(int j=0;j<k;j++){
if(b[j].vis==0){
sum+=a[i].z;
ans[cnt].a=a[i].x;
ans[cnt].b=b[j].x;
b[j].vis=1;
cnt++;
break;
}
}
}
printf("%d\n",sum);
return 0;
}