bzoj P1207
这道题目包含了一定的优先策略,所以是不能用贪心解决的。。
所以是一道dp题
首先,我们将机器人放在第一只鼹鼠的洞,这样就能得到局部最优解
接着,我们考虑可以从第j只地鼠出现的时间开始,一直向第i只鼹鼠出现的地方前进,
或者是每次看一看能不能在下一只地鼠出现前走到哪里,如果不能,就不要浪费时间过去
如果能的话,就取一个最优解
证明:因为每只地鼠都会出现,但是他们被打死或者没被打死都不会影响到后面的鼹鼠出现,
所以是无后效性的,可以用dp解决:
#include<bits/stdc++.h>
using namespace std;
int n,m,f[10010];
struct node{
int t,x,y;
}a[10010];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)scanf("%d%d%d",&a[i].t,&a[i].x,&a[i].y);
for(int i=1;i<=m;i++){
f[i]=1;
for(int j=i-1;j>=1;j--)
if(abs(a[i].x-a[j].x)+abs(a[i].y-a[j].y)<=a[i].t-a[j].t)f[i]=max(f[i],f[j]+1);
}
int ans=0;
for(int i=1;i<=m;i++)ans=max(ans,f[i]);
printf("%d",ans);
return 0;
}