60分求助
查看原帖
60分求助
669036
Planet_Knight楼主2022/8/29 13:46
#include<bits/stdc++.h>
using namespace std;
const int maxx=2555;
int n,m,in[2505],dp[2505]={0,1},sum[3][2505];
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&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]=maxx;
		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);
		}
	}
	printf("%d",dp[n]);
	return 0;
}
2022/8/29 13:46
加载中...