码迷,mamicode.com
首页 > 其他好文 > 详细

「 Luogu P2285 」打鼹鼠

时间:2018-09-03 22:29:25      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:iostream   数据   clu   nbsp   span   const   代码   printf   注意   

解题思路

第一眼看上去觉得要设计一个三维的 DP,$dp[i][j][k]$ 表示在 $(i,j)$ 这个位置上 $k$ 时刻能够打死的最多的鼹鼠。

但是被数据范围卡死。完全开不开数组啊。

然后注意到题目中有句话说保证是按照时间递增序输入的。

想一下,某个鼹鼠能够被打死,是因为他之前被打死的鼹鼠走过来的。

所以只需要考虑每个鼹鼠之前的若干鼹鼠就可。只要两个鼹鼠的距离小于它们出现的时刻只差,那就可以扩展的到。

 

附上代码

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 10003;
int n, m, x[maxn], y[maxn], t[maxn], Ans = 1, dp[maxn];
inline int ABS(int x) {
    return x>0 ? x : -x;
}
int main() {
    cin>>n>>m;
    for(int i=1; i<=m; i++) {
        cin>>t[i]>>x[i]>>y[i];
        dp[i] = 1;
        for(int j=i-1; j>=1; j--)
            if(ABS(x[j]-x[i])+ABS(y[j]-y[i]) <= t[i]-t[j])
                dp[i] = max(dp[j]+1, dp[i]), Ans = max(Ans, dp[i]);
    }
    printf("%d", Ans);
}

 

「 Luogu P2285 」打鼹鼠

标签:iostream   数据   clu   nbsp   span   const   代码   printf   注意   

原文地址:https://www.cnblogs.com/bljfy/p/9581445.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!