【题解】 bzoj1207: [HNOI2004]打鼹鼠 (动态规划)

bzoj1207,懒得复制,戳我戳我

Solution:

  • 挺傻逼的一个\(dp\),直接推就好了
  • 这题在bzoj上的数据有点问题,题目保证每个时间点不会出现在同一位置两个地鼠,然而他有= =(还浪费我20分钟差错

Code:

  • \(luogu\) AC代码:
//It is coded by Ning_Mew on 5.6
#include<bits/stdc++.h>
using namespace std;

const int maxm=1e4+7;

int n,m;
int x[maxm],y[maxm],t[maxm];
int dp[maxm],ans=0;

int main(){
  scanf("%d%d",&n,&m);
  for(int i=1;i<=m;i++){
    scanf("%d%d%d",&t[i],&x[i],&y[i]);
    dp[i]=1;
    for(int j=1;j<i;j++){
      if(t[j]==t[i])break;
      if(abs(x[i]-x[j])+abs(y[i]-y[j])<=t[i]-t[j]) dp[i]=max(dp[i],dp[j]+1);
    }
    ans=max(ans,dp[i]);
  }
  printf("%d\n",ans);
  return 0;
}
  • \(bzoj\) AC 代码:
//It is coded by Ning_Mew on 5.6
#include<bits/stdc++.h>
#define RE register
using namespace std;

const int maxm=1e4+7;

int n,m;
int x[maxm],y[maxm],t[maxm];
int dp[maxm],ans=0;

int main(){
  scanf("%d%d",&n,&m);
  for(RE int i=1;i<=m;i++){
    scanf("%d%d%d",&t[i],&x[i],&y[i]);
    dp[i]=1;
    for(RE int j=1;j<i;j++){
      //if(t[j]==t[i])break;
      if(abs(x[i]-x[j])+abs(y[i]-y[j])<=t[i]-t[j])
    dp[i]=max(dp[i],dp[j]+1);
    }
    ans=max(ans,dp[i]);
  }
  printf("%d\n",ans);
  return 0;
}

原文地址:https://www.cnblogs.com/Ning-Mew/p/8999682.html

时间: 2025-01-11 19:20:54

【题解】 bzoj1207: [HNOI2004]打鼹鼠 (动态规划)的相关文章

BZOJ-1207: [HNOI2004]打鼹鼠 (LIS类似DP)

1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3595  Solved: 1720[Submit][Status][Discuss] Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气.你可以控制一个机器人来打鼹鼠,如果i时刻鼹鼠在某个网格中出现,

【动态规划】【最短路】【spfa】bzoj1207 [HNOI2004]打鼹鼠

<法一>若打了一只鼹鼠后,还能打另一只,我们可以在它们之间连权值为1的边.于是答案就是 以m为终点的最长路长度+1.建反图,就是单源最长路. MLE TLE 一时爽. 1 #include<cstdio> 2 #include<queue> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 vector<int>G[10001]; 7 queue<

[bzoj1207][HNOI2004]打鼹鼠

有一个n*n的网格图,有m只鼹鼠,每只都有一个出现时间t,坐标(x,y),你有一个机器人,如果鼹鼠出现的时候你在那里就可以打死他,但是每1单位时间只能移动1格,求最多能打死多少鼹鼠.....m<=10000 题解:m^2暴力dp啊 我真的只是按照ac顺序排了个序,不是刷水啊... #include<iostream> #include<cstdio> #define ll long long using namespace std; int read() { int x=0,

[BZOJ1207] [HNOI2004] 打鼹鼠 (dp)

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

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

P2285 [HNOI2004]打鼹鼠

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

HNOI2004打鼹鼠(LIS)

大水题-- 不过通过这题我们应该养成一个好习惯:好好看清题-- 竟然没有看到时限 10sec-- 1 var i,j,n,m,ans:longint; 2 f,time,x,y:array[0..15000] of longint; 3 function max(x,y:longint):longint; 4 begin 5 if x>y then exit(x) else exit(y); 6 end; 7 procedure main; 8 begin 9 readln(n,m);ans:=

luoguP2285 [HNOI2004]打鼹鼠 x

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

洛谷 P2285 [HNOI2004]打鼹鼠

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