贪心
核心是如果某道题的最优策略是唯一的,在计算过程中只要一直遵循这个固定的最优策略就可以了。
先来个简单例子:
代码:
例二:
最优思路是,每次都选取结束时间最短的工作。因为每项工作提早结束,留给后面的时间就更多,就有机会完成更多工作。
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int n,s[100005],t[100005],i,temp=0,ans=0;
pair<int, int> a[100005];
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d",&s[i]);
for(i=0;i<n;i++) scanf("%d",&t[i]);
for(i=0;i<n;i++) { a[i].first=t[i]; a[i].second=s[i]; }
//因为sort排序按first元素排,所以first赋值的是结束时间
sort(a,a+n);
for(i=0;i<n;i++)
{
if(temp<a[i].second) //前面工作的结束时间 早于 后面工作的开始时间晚的话
{
ans++; //答案加一
temp=a[i].first; //重新定位于后面工作的结束时间
}
}
cout<<ans;
}