BZOJ1207: [HNOI2004]打鼴鼠

1207: [HNOI2004]打鼴鼠

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 3119  Solved: 1517
[Submit][Status][Discuss]

Description

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

Input

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

Output

僅包含一個正整數,表示被打死鼴鼠的最大數目

Sample Input

2 2
1 1 1
2 2 2

Sample Output

1

HINT

Source

[Submit][Status][Discuss]
題解: 此題考慮dp,令f[i]表示打前i個最多打多少個 然後就可以考慮一個簡單的轉移(暴力枚舉t時間能否到達),暴力水過QAQ
貼上代碼:
#include<iostream>  
#include<cstdio>  
#include<cstdlib>  
#include<cstring>  
#include<cmath>  
#include<algorithm>  
#define ll long long  
#define maxn 10005  
using namespace std;  
int n,m,ans;  
int f[maxn],t[maxn],x[maxn],y[maxn];  
inline int read()  
{  
    int x=0,f=1;char ch=getchar();  
    while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}  
    while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}  
    return x*f;  
}  
int main()  
{  
    n=read();m=read();  
    for(int i = 1 ; i <= m ; i++) f[i]=1;  
    for(int i = 1 ; i <= m ; i++) 
    {  
        t[i]=read();x[i]=read();y[i]=read();  
        for(int j = 1 ; j < i ; j++) if (abs(x[i]-x[j])+abs(y[i]-y[j])<=t[i]-t[j])  
            f[i]=max(f[i],f[j]+1); 
		ans=max(ans,f[i]);   
    }   
    printf("%d\n",ans);  
}  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章