一个餐馆,有m张桌子,每张桌子有各自的人数限制,假设某个时段来了n批客人,每批有人数,及愿意消费的金额,不接受拼桌,问 如何选择一些客人,使得收益最大化
如
输入
3 5 (3张桌子,5批客人)
2 4 2 (3张桌子 各自的人数)1 3 (第1批,1个人,愿意消费3元)
3 5 (第2批,1个人,愿意消费3元)
3 7
5 9
1 10
输出
20
3 4
2 2 4
1 9
1 10
2 11
3 7
输出30
下面代码 超时了么? 本地运行可以,提交上去之后,却是 “数组越界,栈溢出,等问题......”
求路过的大神指教
-------------------------------------------------------本地VS运行----------------------------------------------
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int m,n;
cin>>n>>m;
int *a=new int[n];
int b[50001][3];
memset(b,0,50001*3);
int i;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<m;i++)
{
cin>>b[i][0]>>b[i][1];
}
sort(a,a+n);
int j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
if(b[i][0]<=a[j])
{
b[i][2]=a[j];break;
}
}
for(j=0;j<n;j++)//3 desks
{
int max=-1;
int k=0;
for(i=0;i<m;i++)
if(b[i][2]==a[j]){
if(b[i][1]>max && b[i][2]!=-1 && b[i][2]!=0)
{
max=b[i][1];
k=i;//ji zhu
//cout<<"max: k:"<<max<<" "<<k<<endl;
}
}
for(i=0;i<m;i++)
if(b[i][2]==a[j]){
//cout<<"k:"<<k;
if(i==k)b[i][2]=-1;// used
else {
if(j!=n-1)b[i][2]=a[j+1];
}
}
cout<<endl;
for(i=0;i<m;i++)
{
cout<<b[i][0]<<" "<<b[i][1]<<" "<<b[i][2]<<endl;
}cout<<endl;
}
int sum=0;
for(i=0;i<m;i++)
if(b[i][2]==-1)sum+=b[i][1];
cout<<sum<<endl;
system("pause");
return 0;
}