P1799——数列【NOI导刊】2010提高

写到哪博客就更到哪吧
树的基本操作over掉了,今天转回来看dp
应该会好理解一点了
至少没有开始时那么懵
那么,action
P1799
直接上解析喽,简单的一道dp
原谅我傻,一看题就只会一维dp,然而题解里都是二维的
那还是一维吧
因为本题其实只与去掉的数的个数有关,所以一维就够
如果已知去掉i-1个数时,最多有dp[i-1]个满足条件,
那么如果再去掉最后一个数,此时最多有dp[i-1]+1(当最后加进来的一个数刚好就是和他的次序数一致时)个数满足条件
那么代码就很简单了
#include<bits/stdc++.h>
using namespace std;
int a[1010],n,ans;
int dp[1010];//表示剩余j个时 
//最多能有  个满足条件 
void init()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>a[i];
}
void DP() 
{
	for(int i=1;i<=n;i++)
	{
		for(int j=i;j>=1;j--)
			dp[j]=max(dp[j],dp[j-1]+(a[i]==j?1:0));
	}//然后,找到最大的
	for(int i=0;i<=n;i++) 
	ans=max(ans,dp[i]);
}
int main()
{
	init();
	DP();
	cout<<ans<<endl;
	return 0;
} 

  

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/ve-2021/p/9255425.html