滴滴2016 笔试题 编程题1 求路过的大神指教

一个餐馆,有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;
}
    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值