6个tle求调
查看原帖
6个tle求调
819682
Exile_Code楼主2023/11/11 21:58
#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <list>
#include <string>
#include <cmath>
#include <bitset>
#include <stack>
#include <unordered_set>


#define ull				unsigned long long 
#define ll				long long
#define pii				pair<ll ,ll>
#define ft				first
#define sd				second
#define pr				pair
#define cy				cout<<"Yes"<<endl
#define cn				cout<<"No"<<endl
#define forn(i,n)		for(int (i)=0;(i)<(n);(i)++)   
#define forne(i,n)		for(int (i)=1;(i)<=(n);(i)++)
#define rforn(i,n)		for(int (i)=(n-1);(i)>=(0);(i)--)   
#define rforne(i,n)		for(int (i)=(n);(i)>=(1);(i)--)
#define vv				vector
const int inf = 0x004f4f4f;
const int N = 5e5 + 10;
struct edge {
	int next, to, w;
};
vv<vv<pii>>tree;
vv<vv<edge>>e;
ll t;



void solve() {


	int n, m; cin >> n >> m;

	vv<pii>nums(m);//存坐标
	vv<int>tm(m);//存时间点

	for (int i = 0; i < m; i++)
		cin >> tm[i] >> nums[i].first >> nums[i].second;

	vv<int>f(m);//存dp值
	for (int i = 0; i < m; i++) {
		f[i] = 1;
		for (int j = 0; j < i; j++) {
			if (abs(nums[i].first - nums[j].first)
				+ abs(nums[i].second - nums[j].second)
				<= tm[i] - tm[j])//曼哈顿距离小于时间差
				f[i] = max(f[i], f[j] + 1);//进行转移
		}
	}
	int mx = 1;
	for (int i = 0; i < m; i++)
		mx = max(mx, f[i]);//找最大
	cout << mx << endl;

}
int main() {


	t = 1;
	//cin >> t;

	while (t--)
		solve();


	return 0;
}
2023/11/11 21:58
加载中...