Main » 2013 October 11 » [NOIP2010模拟赛]打鼹鼠
2:03 PM [NOIP2010模拟赛]打鼹鼠 |
这题想了一会就想出来了其实可以在n^2上做一些优化方程:f[i]=min(f[j]+1)(j<i)(time[j]>=time[i]+dis(p[i],p[j]))#include<cstdio> #include<cstdlib> #include<cstring> #include<set> #include<algorithm> #include<map> #include<vector> #include<queue> #include<iostream> #include<string> #include<cmath> #define M 100001 #define FOR(i,a,b) for(i=(a);i<=(b);i++) #define ROF(i,a,b) for(i=(a);i>=(b);i--) typedef long long LL; using namespace std; int x[M],y[M],t[M],a[M],f[M],n,m; int dis(int i,int j) { return fabs(x[i]-x[j])+fabs(y[i]-y[j]); } int main() { cin>>n>>m; int i,j; FOR(i,1,m) { scanf("%d%d%d",&t[i],&x[i],&y[i]); } FOR(i,1,m) { f[i]=1; ROF(j,i-1,1) { if (t[i]-t[j]>=n*2) {f[i]=max(f[i],a[j]+1);break;} if (t[i]>=t[j]+dis(i,j)) f[i]=max(f[i],f[j]+1); } a[i]=max(a[i-1],f[i]); } printf("%d\n",a[m]); } |
|
Total comments: 0 | |