DP || HYSBZ 1207 打鼹鼠

n*n的网格,有m个鼹鼠,t时间会有一只鼹鼠出现在(x,y)点处,如果机器人也在这个点就可以打到鼹鼠

机器人初始位置任意,每秒可以移动一格,问最多打到多少鼹鼠

*解法:f[i]表示前i只鼹鼠打了多少个

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
#define SZ 10005
#define INF 1e9+10
int f[SZ];
struct mice
{
    int t, x, y;
}p[SZ];
int main()
{
    int n, m;
    scanf("%d %d", &n, &m);
    for(int i = 0; i < m; i++)
        scanf("%d %d %d", &p[i].t, &p[i].x, &p[i].y);
    for(int i = 0; i < m; i++)
    {
        f[i] = 1;//只打这一只
        for(int j = 0; j < i; j++)
        {
            if(p[i].t - p[j].t >= abs(p[i].x - p[j].x) + abs(p[i].y - p[j].y) )
            {
                f[i] = max(f[i], f[j] + 1);
            }
        }
    }
    int ans = f[0];
    for(int i = 1; i < m; i++)
        ans = max(ans, f[i]);
    printf("%d\n", ans);
    return 0;
}

原文地址:https://www.cnblogs.com/pinkglightning/p/8419164.html

时间: 2024-11-06 13:48:08

DP || HYSBZ 1207 打鼹鼠的相关文章

[BZOJ 1207]打鼹鼠

[问题描述] 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气.你可以控制一个机器人来打鼹鼠,如果i时刻鼹鼠在某个网格中出现,而机器人也处于同一网格的话,那么这个鼹鼠就会被机器人打死.而机器人每一时刻只能够移动一格或停留在原地不动.机器人的移动是指从当前所处的网格移向相邻的网格,即从坐标为(i,j)的网格移向(i-1, j),(i+1, j),(i,j-1)

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

BZOJ 1207: [HNOI2004]打鼹鼠( dp )

dp.. dp[ i ] = max( dp[ j ] + 1 ) ---------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> #define rep( i , n ) for

[BZOJ 1207] [HNOI 2004] 打鼹鼠 【DP】

题目链接:BZOJ - 1207 题目分析 每一次打鼹鼠一定是从上一次打某只鼹鼠转移过来的,从打第 j 只鼹鼠能不能转移到打第 i 只鼹鼠,算一下曼哈顿距离和时间差就知道了. 那么就有一个 DP ,用 f[i] 表示打完第 i 只鼹鼠时最多打了多少只鼹鼠,然后 f[i] 可以由 f[1] .. f[i-1] 转移,类似于最长上升子序列. 然而这道题不能像最长上升子序列一样二分优化或树状数组优化,只能加一个判断 Maxf[] 都不够大就退出的优化.见代码. 代码 #include <iostrea

[BZOJ 1207][HNOI2004]打鼹鼠(Dp)

Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气.你可以控制一个机器人来打鼹鼠,如果i时刻鼹鼠在某个网格中出现,而机器人也处于同一网格的话,那么这个鼹鼠就会被机器人打死.而机器人每一时刻只能够移动一格或停留在原地不动.机器人的移动是指从当前所处的网格移向相邻的网格,即从坐标为(i,j)的网格移向(i-1, j),(i+1, j),(i

1207: [HNOI2004]打鼹鼠(DP)

Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个nn的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气.你可以控制一个机器人来打鼹鼠,如果i时刻鼹鼠在某个网格中出现,而机器人也处于同一网格的话,那么这个鼹鼠就会被机器人打死.而机器人每一时刻只能够移动一格或停留在原地不动.机器人的移动是指从当前所处的网格移向相邻的网格,即从坐标为(i,j)的网格移向(i-1, j),(i+1, j),(i,

BZOJ 1207 [HNOI2004]打鼹鼠(简单dp)

BZOJ 1207 题解:做满足条件的最大上升子序列处理即可 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <algorithm> 5 #include <map> 6 #include <queue> 7 #include <vector> 8 #include <cstring> 9 #include <

hdu 1207 汉诺塔II (DP+递推)

汉诺塔II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4529    Accepted Submission(s): 2231 Problem Description 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往

BZOJ 1207 DP

打一次鼹鼠必定是从以前的某一次打鼹鼠转移过来的 以打每个鼹鼠时的最优解为DP方程 #include<iostream> #include<cstdio> #include<cstdlib> #define N 10005 using namespace std; int n,m,ans; int f[N],t[N],x[N],y[N],mx[N]; int main() { scanf("%d%d",&n,&m); for(int i