专栏文章

P2285 [HNOI2004] 打鼹鼠

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minnrtti
此快照首次捕获于
2025/12/02 05:25
3 个月前
此快照最后确认于
2025/12/02 05:25
3 个月前
查看原文

状态:dpidp_i表示最后打第i只鼠鼠时可以打的最大鼠鼠数量

初始化:dpi=1dp_i=1打第i只鼠鼠时至少打了第i只鼠鼠

状态转移:dpi=max(dpi,dpp+1)dp_i=max(dp_i,dp_p+1)dppdp_p表示可以打鼠鼠p时的最大数量

确定答案:max(dpi)max(dp_i)因为不确定最后打死哪只鼠鼠

CPP
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn(1e5+10);
int n,m,ans(0);
struct node{
	int t,x,y;
}a[maxn];
int dp[maxn];
bool check(int i,int j){
	return (abs(a[i].x-a[j].x)+abs(a[i].y-a[j].y))<=abs(a[i].t-a[j].t);
} 
int main(){
	cin>>n>>m;
	for(int i(1);i<=m;i++){
		cin>>a[i].t>>a[i].x>>a[i].y;
	}
	for(int i(1);i<=n;i++){
		dp[i]=1;
	}
	for(int i(1);i<=m;i++){
		for(int j(1);j<=i;j++){
			if(i!=j&&check(i,j)){
				dp[i]=max(dp[i],dp[j]+1);
			}
		}
	}
	for(int i(1);i<=m;i++){
		ans=max(ans,dp[i]);
	}
	cout<<ans<<'\n';
	return 0;
}

注意到:

打死一只鼠鼠蹲3年

评论

0 条评论,欢迎与作者交流。

正在加载评论...