HYSBZ 1207 打鼹鼠 LIS DP

点击打开链接

中文就不说题意了。

题解:最长不下降子序列的变种,dp[i]表示最后一个打i时的最大打击个数。

#include <iostream>
#include<cstdio>
using namespace std;
struct node{
	int time,x,y;
}a[100010];
int max1(int x,int y){
	return x>y?x:y;
}
int z(int x){
	return x>=0? x:-x;
}
int check(int x,int y){
	if(z(a[x].x-a[y].x)+z(a[x].y-a[y].y)<=z(a[x].time-a[y].time))return 1;
	return 0;
}
int dp[100010];
int main()
{
	int n,m,i,j;
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&a[i].time,&a[i].x,&a[i].y);
	}
	for(i=1;i<=m;i++)dp[i]=1;
	for(i=2;i<=m;i++){
		for(j=1;j<i;j++){
			if(z(a[i].x-a[j].x)+z(a[i].y-a[j].y)<=z(a[i].time-a[j].time))dp[i]=max1(dp[i],dp[j]+1);
		}
	}
	int ans=0;
	for(i=1;i<=m;i++)ans=max1(ans,dp[i]);
	printf("%d\n",ans);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/nwpu2017300135/article/details/80501195
今日推荐