首页 > 其他分享 >[lnsyoj1521/luoguP2292] 打鼹鼠

[lnsyoj1521/luoguP2292] 打鼹鼠

时间:2024-11-09 15:29:48浏览次数:1  
标签:PII typedef int 鼹鼠 luoguP2292 lnsyoj1521 time pair include

题意

给定 \(n\) 个点 \((x_i,y_i)\) 和对应时间 \(time_i\),求从任意点开始,每单位时间静止或四向移动,在 \(time_i\) 时停留的点数的最大值,保证 \(time_i\) 顺序输入

sol

线性 dp
记 \(f_i\) 表示停留在第 \(i\) 个点时,点数的最大值,则转移方程为

\[f_i=\max_{j=1}^i f_j+1(dist_{i,j}\le time_j - time_i) \]

注意数组初始化全为 \(1\)

代码

#include <iostream>
#include <algorithm>
#include <cstring>
#define x first 
#define y second 

using namespace std;
typedef pair<int, int> PII;
typedef pair<int, PII> PIP;

const int N = 10005;

int n, m;
int f[N];
PIP g[N];

int dist(PII a, PII b){
    return abs(a.x - b.x) + abs(a.y - b.y);
}

int main(){
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= m; i ++ ) scanf("%d%d%d", &g[i].x, &g[i].y.x, &g[i].y.y);
    
    int ans = 1;
    for (int i = 1; i <= m; i ++ ) f[i] = 1;
    for (int i = 2; i <= m; i ++ )
        for (int j = 1; j < i; j ++ )
            if (dist(g[i].y, g[j].y) <= g[i].x - g[j].x) f[i] = max(f[i], f[j] + 1), ans = max(ans, f[i]);

    printf("%d\n", ans);

    return 0;
}

标签:PII,typedef,int,鼹鼠,luoguP2292,lnsyoj1521,time,pair,include
From: https://www.cnblogs.com/XiaoJuRuoUP/p/-/lnsyoj1521_luoguP2292

相关文章

  • P2285 [HNOI2004] 打鼹鼠
    [HNOI2004]打鼹鼠题目描述鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的。根据这个特点阿牛编写了一个打鼹鼠的游戏:在一个$n\timesn$的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气。你可以控制一个机器人来打鼹鼠,如果$i$时刻......
  • P2285 [HNOI2004] 打鼹鼠
    题目:链接:https://www.luogu.com.cn/problem/P2285这题感觉如果想不到递推关系可能会很麻烦,因为我之前想到的关系就是用dp存:包含三个维度:times,x,y,即dp[times][x][y]来存,然后递推。但是如果把dp看作是以p结尾的抓到的耗子数量时就会方便很多同时要注意,每次到一个点的时候先立为1......
  • 打鼹鼠
    鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的。根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个nn的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气。你可以控制一个机器人来打鼹鼠,如果i时刻鼹鼠在某个网格中出现,而机器人也处于同一网格的......
  • [刷题笔记] Luogu P2285 [HNOI2004] 打鼹鼠
    ProblemAnalysis我们初始可以任意决定机器人的位置,状态很多,暴力显然会寄掉。不妨先贪心的思考一下。我们肯定希望机器人初始在最先出现鼹鼠的洞,因为出现在没有鼹鼠的洞是无效的。题目保证输入数据是严格按照出现时间递增顺序给出。定义\(f_i\)表示前\(i\)只鼹鼠最多能打到......