제출 #702048

#제출 시각아이디문제언어결과실행 시간메모리
702048ld_minh4354Financial Report (JOI21_financial)C++14
28 / 100
4104 ms782564 KiB
#include<bits/stdc++.h>
using namespace std;
 
#define int long long
#define fi first
#define se second
#define pb push_back
 
 
 
signed main()
{
	ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//	freopen("input.000","r",stdin);
//	freopen("output.000","w",stdout);
//	srand((unsigned)time(NULL));
//	rand()
	
	int n,d,i,a[7005],dp[7005][7005],ans,j,k,u,min_dist,c;
	
	cin>>n>>d;
	for (i=1;i<n+1;i++) cin>>a[i];
	
	if (n==1)
	{
		cout<<1;return 0;
	}
	
	if (a[1]<a[2]) dp[2][1]=2;else dp[2][1]=1;
	
	for (j=1;j<i;j++) for (i=3;i<n+1;i++)
	{
		c=0;min_dist=0;
		for (k=j+1;k<i;k++) if (a[k]>a[j])
		{
			c++;
			min_dist=max(min_dist,c);
		}
		else c=0;
		
		if (min_dist<d)
		{
			dp[i][j]=1;
			
			for (k=1;k<d+1;k++)
			if (i-k>j)
			{
				if (a[j]>=a[i-k]) dp[i][j]=max(dp[i][j],dp[i-k][j]);
			}
			else if (i-k==j)
			{
				for (u=1;u<j;u++) if (a[u]<a[j]) dp[i][j]=max(dp[i][j],dp[j][u]);
			}
		
			if (a[i]>a[j]) dp[i][j]++;
		}
		else dp[i][j]=-1;
	}
	
//	for (i=1;i<n+1;i++)
//	{
//		for (j=0;j<i;j++) cout<<dp[i][j]<<" ";
//		cout<<"\n";
//	}
	
	ans=1;
	for (j=1;j<n;j++) ans=max(ans,dp[n][j]);
	cout<<ans;
}
 
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...