基本全WA,求调
查看原帖
基本全WA,求调
1050386
lyjeve楼主2025/1/19 14:57
#include <iostream>
#include <stdio.h>
using namespace std;
int n;
int m;
int dt[102];
char in;
int dp[3][1025][1025];
int sum[1024];
int ans;
void getsum(int t,int &ans)
{
	ans=0;
	while(t)ans+=(t&1),t>>=1;
}
void init()
{
	for(int i=0;i<=1023;i++)
		getsum(i,sum[i]);
}
int main()
{
	scanf("%d %d\n",&n,&m);
	int S=(1<<m)-1;
	init();
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
			in=getchar(),dt[i]=(dt[i]<<1)+(in=='H'?1:0);
		in=getchar();
	}
	for(int i=0;i<=S;i++)
		if(!((i&(i<<1)) || (i&(i<<2)) || (i&dt[0])))
			dp[0][0][i]=sum[i];
	for(int i=0;i<=S;i++)
		for(int j=0;j<=S;j++)
			if(!((i&(i<<1)) || (i&(i<<2)) || (i&dt[0]) || (j&(j<<1)) || (j&(j<<2)) || (j&dt[1]) || (i&j)))
				dp[1][i][j]=sum[i]+sum[j];
	for(int i=2;i<n;i++)
	{
		for(int j=0;j<=S;j++)
		{
			if((j&(j<<1)) || (j&(j<<2)) || (j&dt[i-1]))continue;
			for(int k=0;k<=S;k++)
			{
				if((k&(k<<1)) || (k&(k<<2)) || (k&dt[i]) || (k&j))continue;
				for(int k1=0;k1<=S;k1++)
				{
					if((k1&(k1<<1)) || (k1&(k1<<2)) || (k1&dt[i-2]) || (k1&j) || (k&k1))continue;
					dp[i%3][j][k]=max(dp[i%3][j][k],dp[(i-1)%3][k1][k]+sum[j]);
				}
			}
		}
	}
	int y=(n-1)%3;
	for(int i=0;i<=S;i++)
		for(int j=0;j<=S;j++)
			ans=max(ans,dp[y][i][j]);
	cout<<ans;
	return 0;
}

错误记录

https://www.luogu.com.cn/record/199203741

(可能编译器问题,编译无误)

2025/1/19 14:57
加载中...