1. 程式人生 > >BZOJ1207: [HNOI2004]打鼴鼠

BZOJ1207: [HNOI2004]打鼴鼠

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]打鼴鼠