73分求助 #3TLE #9#10WA
查看原帖
73分求助 #3TLE #9#10WA
170047
小渣青999楼主2020/8/20 11:05

dp[i]表示从开始到i时间内最多能选取的部分和

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[3000010]; 
struct node
{
	int x,y;
}e[200010];
bool cmp(node a,node b)
{
	if(a.x!=b.x) return a.x<b.x;
	return a.y<b.y;
}
int main()
{
	int n;scanf("%d",&n);
	int maxx=0;
	for(int i=0;i<n;i++)
	{
		scanf("%d%d",&e[i].x,&e[i].y);
		if(e[i].y>maxx)  maxx=e[i].y;
	}
	sort(e,e+n,cmp);
	for(int i=0;i<n;i++)
	{
		int x=e[i].x,y=e[i].y;
		dp[y]=max(dp[y],dp[x-1]+y-x+1);
		for(int j=y+1;j<maxx;j++)
		    dp[j]=max(dp[y],dp[j]);
	//	printf("%d %d dp:%d\n",x,y,dp[y]);
	}
	cout<<dp[maxx];
	return 0;
}
2020/8/20 11:05
加载中...