BZOJ1207: [HNOI2004]打鼴鼠
阿新 • • 發佈:2017-09-20
tex 一個點 .com return http scanf problem std ret
【傳送門:BZOJ1207】
簡要題意:
有一個n*n的矩陣,給出m個點,每個點都在固定的位置,固定的時刻出現,點按照出現的時刻遞增給出,保證同一時刻同一位置只可能出現一個點。一開始一個人可以在矩陣的任意位置出現,每秒鐘可以走四個方向(上下左右),也可以停頓。求出最多能走過的所有點(當點出現時才算走過)
題解:
DP,因為點有時刻出現,所以我們定義f[i]表示必須走過i點的能走過的點數
參考代碼:
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<cmath> using namespace std; struct node { int x,y,t; }a[11000]; int f[11000]; int main() { int n,m; 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); } f[1]=1;for(int i=2;i<=m;i++) { f[i]=1; for(int j=i-1;j>=1;j--) { if((a[i].t-a[j].t)>=(abs(a[i].x-a[j].x)+abs(a[i].y-a[j].y))) { f[i]=max(f[i],f[j]+1); } } } int ans=0; for(int i=1;i<=m;i++) ans=max(f[i],ans); printf("%d\n",ans); return 0; }
BZOJ1207: [HNOI2004]打鼴鼠