注意:如果上一个活动在t时间结束,下一个活动最早应该在t+1时间开始
解题思路
由于用开始时间的话容易产生冲突,所以用结束时间进行排序比较好,本来打算用最长递增子序列,结果发现超时,所以该用其他办法了
解题代码
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct node { int start,end1; }ch[10005]; bool cmp(node a,node b) { return a.end1<b.end1; } int dp[10005]; int main() { int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); int sum=1; for(int i=1;i<=n;i++) dp[i]=0; for(int i=1;i<=n;i++) scanf("%d%d",&ch[i].start,&ch[i].end1); sort(ch+1,ch+1+n,cmp); int time=ch[1].end1; for(int i=2;i<=n;i++) { if(time<ch[i].start) { time=ch[i].end1; sum++; } } cout<<sum<<endl; } return 0; }