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

[HNOI2004] 打鼴鼠

style 對比 code 當前 這一 ext ios tput 喜歡

★★ 輸入文件:mouse.in 輸出文件:mouse.out 簡單對比
時間限制:1 s 內存限制:128 MB

鼴鼠是一種很喜歡挖洞的動物,但每過一定的時間,它還是喜歡把頭探出到地面上來透透氣的。

根據這個特點阿Q編寫了一個打鼴鼠的遊戲:在一個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按遞增的順序給出。註意同一時刻可能出現多只鼴鼠,但同一時刻同一地點只可能出現一只鼴鼠。

【輸入樣例】

2 2

1 1 1

2 2 2

【輸出格式】

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

【輸出樣例】

1

【運行限制】

運行時限:1秒鐘

【評分方法】

本題目一共有十個測試點,每個測試點的分數為總分數的10%。對於每個測試點來說,如果你給出的答案正確,那麽你將得到該測試點全部的分數,否則得0分。

思路:

O(m2)的DP暴力;

代碼實現

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxm=1e4+10;
 6 int n,m,ans;
 7 struct mole{int time,x,y,d;}t[maxm];
 8 bool comp(const mole&x,const mole&y){return x.time<y.time;}
 9 int main(){
10     freopen("mouse.in","r",stdin);
11     freopen("mouse.out","w",stdout);
12     scanf("%d%d",&n,&m);
13     if(!m){puts("0");return 0;}
14     for(int i=1;i<=m;i++)
15     scanf("%d%d%d",&t[i].time,&t[i].x,&t[i].y);
16     for(int i=1;i<=m;i++) t[i].d=1;
17     for(int i=1;i<=m;i++){
18         for(int j=i+1;j<=m;j++){
19             if(abs(t[i].x-t[j].x)+abs(t[i].y-t[j].y)<=t[j].time-t[i].time){
20                 t[j].d=max(t[j].d,t[i].d+1);
21             }
22         }
23     }
24     for(int i=1;i<=m;i++) ans=max(ans,t[i].d);
25     printf("%d\n",ans);
26     return 0;
27 }

[HNOI2004] 打鼴鼠