1. 程式人生 > >luogu P2285 [HNOI2004]打鼴鼠

luogu P2285 [HNOI2004]打鼴鼠

algo 整數 編寫 地面 sca clas -1 code 移動

題目描述

鼴鼠是一種很喜歡挖洞的動物,但每過一定的時間,它還是喜歡把頭探出到地面上來透透氣的。根據這個特點阿牛編寫了一個打鼴鼠的遊戲:在一個n*n的網格中,在某些時刻鼴鼠會在某一個網格探出頭來透透氣。你可以控制一個機器人來打鼴鼠,如果i時刻鼴鼠在某個網格中出現,而機器人也處於同一網格的話,那麽這個鼴鼠就會被機器人打死。而機器人每一時刻只能夠移動一格或停留在原地不動。機器人的移動是指從當前所處的網格移向相鄰的網格,即從坐標為(i,j)的網格移向(i-1, j),(i+1, j),(i,j-1),(i,j+1)四個網格,機器人不能走出整個n*n的網格。遊戲開始時,你可以自由選定機器人的初始位置。

現在知道在一段時間內,鼴鼠出現的時間和地點,請編寫一個程序使機器人在這一段時間內打死盡可能多的鼴鼠。

輸入輸出格式

輸入格式:

從文件input.txt中讀入數據,文件第一行為n(n<=1000), m(m<=10000),其中m表示在這一段時間內出現的鼴鼠的個數,接下來的m行中每行有三個數據time,x,y表示有一只鼴鼠在遊戲開始後time個時刻,在第x行第y個網格裏出現了一只鼴鼠。Time按遞增的順序給出。註意同一時刻可能出現多只鼴鼠,但同一時刻同一地點只可能出現一只鼴鼠。

輸出格式:

輸出文件output.txt中僅包含一個正整數,表示被打死鼴鼠的最大數目。

輸入輸出樣例

輸入樣例#1:
2 2	         
1 1 1		
2 2 2
輸出樣例#1:
1

dp時間夠用的話 dp[i]就取max dp[I],dp[j]+1

#include<iostream>
#include<algorithm>
using namespace std;


int t[10003],x[10003],y[10003],dp[10003];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1
;i<=m;i++) { scanf("%d%d%d",&t[i],&x[i],&y[i]); dp[i]=1; } int ans=0; for(int i=1;i<=m;i++) { for(int j=1;j<i;j++) { if(abs(y[i]-y[j])+abs(x[i]-x[j])<=t[i]-t[j]) { dp[i]=max(dp[i],dp[j]+1); } } ans=max(ans,dp[i]); } printf("%d\n",ans); return 0; }

luogu P2285 [HNOI2004]打鼴鼠