• 「 Luogu P2285 」打鼹鼠


    解题思路

    第一眼看上去觉得要设计一个三维的 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);
    }
  • 相关阅读:
    获取网卡信息
    MVC Razor
    MVC
    Windows 消息
    sql 总结
    学生成绩表 SQL练习题
    oracle与sqlserver的十大区别
    for的冒泡排序练习题
    对于for的一些认识
    穷举
  • 原文地址:https://www.cnblogs.com/bljfy/p/9581445.html
Copyright © 2020-2023  润新知