悬关`求样例
查看原帖
悬关`求样例
921868
blbl061楼主2024/7/25 08:45

记忆化搜索,题目样例对了

#include<bits/stdc++.h>//3
#define ll long long
using namespace std;

int const N=200005;
int n,m,a[N],b[N],c[N],d[N];//点值,记忆化,a[i]是否存在,标记; 
vector<int>v[N];

int f(int x,int s){
	if(x==n){
		return s;
	}
	if(b[x]!=-1)return b[x];
	int ax=0;
	for(int i=0;i<v[x].size();i++){
		if(!d[v[x][i]]&&a[v[x][i]]>=a[x]){
			c[a[v[x][i]]]++;
			d[v[x][i]]=1;
			ax=max(ax,f(v[x][i],s+(c[a[v[x][i]]]==1)));
			c[a[v[x][i]]]--;
			d[v[x][i]]=0;
		}
	}
	b[x]=ax;
	return ax;
}

int main(){
	ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int u,w;
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
	memset(b,-1,sizeof b);
	while(m--){
		cin>>u>>w;
		v[u].push_back(w);
		v[w].push_back(u);
	}
	cout<<f(1,1);
	return 0;
}

2024/7/25 08:45
加载中...