[HNOI2004]打鼹鼠

题目大意:
  有一个$n\times n$的格子,按顺序出现$m(m\leq10000)$只鼹鼠。一开始你可以任选一个位置作为一个起点,每秒钟你可以选择原地不动或走到任一与当前位置四连通的格子上。第$t_i$秒会在$(x_i,y_i)$上出现一个鼹鼠,若你当时刚好在这个格子上,就算作成功打到了这个鼹鼠。问最多能打到几个鼹鼠?

思路:
  用$f[i]$表示前$i$个鼹鼠中最多能打到几个。转移时判断一下曼哈顿距离是否小于等于时间差即可。

 1 #include<cstdio>
 2 #include<cctype>
 3 #include<algorithm>
 4 inline int getint() {
 5     register char ch;
 6     while(!isdigit(ch=getchar()));
 7     register int x=ch^'0';
 8     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
 9     return x;
10 }
11 const int M=10000;
12 int t[M],x[M],y[M],f[M];
13 int main() {
14     const int n=getint(),m=getint();
15     int ans=0;
16     for(register int i=0;i<m;i++) {
17         t[i]=getint(),x[i]=getint(),y[i]=getint(),f[i]=1;
18         for(register int j=0;j<i;j++) {
19             if(std::abs(x[i]-x[j])+std::abs(y[i]-y[j])<=t[i]-t[j]) {
20                 f[i]=std::max(f[i],f[j]+1);
21             }
22         }
23         ans=std::max(ans,f[i]);
24     }
25     printf("%d\n",ans);
26     return 0;
27 }

 

转载于:https://www.cnblogs.com/skylee03/p/8454326.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值