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

来源:互联网 发布:安阳日报社 网络投稿 编辑:程序博客网 时间:2024/05/20 05:08

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


0 0