这是测试点结果(可以这样说嘛
第一个测试点WA; 2-5、8、16AC; 其余TLE(悲
下面是代码,望大佬赐教
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m1,m2;
int dl[100005];
int p[100005];
struct Time
{
int a;
int b;
}t1[100005],t2[100005];
bool cmp(Time t,Time s)
{
return t.a<s.a;
}
int dp(int x,int m,Time t[100005])//x,m1//???
{
memset(dl,0,sizeof(dl));
int cnt=0;
int vis=0;
int sum=0;
for(int i=1;i<=m;i++)//遍历m架飞机
{
vis=0;//记录i有无停靠好
for(int j=1;j<=cnt;j++)//遍历已使用的廊桥
{
if(dl[j]<=t[i].a)
{
dl[j]=t[i].b;
vis=1;
break;
}
}
if(cnt<x && vis==0)
{
dl[++cnt]=t[i].b;
vis=1;
}
if(vis==1)
{
sum++;
}
}
return sum;
}
int main()
{
cin>>n>>m1>>m2;
for(int i=1;i<=m1;i++)
{
cin>>t1[i].a>>t1[i].b;
}
for(int i=1;i<=m2;i++)
{
cin>>t2[i].a>>t2[i].b;
}
sort(t1+1,t1+m1+1,cmp);
sort(t2+1,t2+m2+1,cmp);
int maxx=-0x3f3f3f3f;
for(int i=1;i<=n;i++)
{
maxx=max(maxx,dp(i,m1,t1)+dp(n-i,m2,t2));
}
cout<<maxx<<endl;
return 0;
}