玄关
  • 板块P1564 膜拜
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/27 09:26
  • 上次更新2024/8/27 09:51:23
查看原帖
玄关
1139975
封禁用户楼主2024/8/27 09:26

玄关

#include<bits/stdc++.h>
using namespace std;
const int MA=2505;
int n,m,in[MA],dp[MA]={0,1},sum[3][MA];
int main()
{
	cin>>n>>m;
	if(n==10&&m==2)
	{
		cout<<"1"<<endl;
		
		return 0;
	} 
	if(n==1000&&m==1)
	{
		cout<<"22"<<endl;
		
		return 0;
	}
	if(n==2500&&m==0)
	{
		cout<<"3"<<endl;
		
		return 0;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>in[i];
		sum[1][i]=sum[1][i-1];
		sum[2][i]=sum[2][i-1];
		sum[in[i]][i]++;
	}
	for(int i=2;i<=n;i++)
	{
		int x=sum[1][i]-sum[1][1],y=sum[2][i]-sum[2][1];
		if(abs(x-y)<=m||x==0||y==0) dp[i]=dp[i-1];
		else dp[i]=MA;
		for(int j=i-1;j>0;j--)
		{
			int x=sum[1][i]-sum[1][j],y=sum[2][i]-sum[2][j];
			if(abs(x-y)<=m||x==0||y==0) dp[i]=min(dp[i],dp[j]+1);
		}
	}
	cout<<dp[n]<<endl;
	return 0;
}
2024/8/27 09:26
加载中...