有没有大佬帮忙看一看
  • 板块灌水区
  • 楼主lcy0506
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/24 19:50
  • 上次更新2024/7/24 20:41:56
查看原帖
有没有大佬帮忙看一看
1044302
lcy0506楼主2024/7/24 19:50

P2704
WA

#include <bits/stdc++.h>
using namespace std;
vector<int> q;
char a[101][101];
int s[1000001],f[101][1001][1001];
int main()
{
	int n,m,ans=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>a[i][j];
			s[i]|=(a[i][j]=='P')<<j;
		}
	}
	for(int i=0;i<1<<m;i++)
	{
		int num=1,last=-1;
		for(int j=0;j<m;j++)
		{
			if(i>>j&1)
			{
				if(last!=-1&&j-last<3)
				num=0;
				last=j;
			}
		}
		if(num)
		q.push_back(i);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<q.size();j++)
		{
			if((q[j]&s[i])==q[j])
			{
				for(int k=0;k<q.size();k++)
				{
					if(q[k]&s[i-1]==q[k])
					{
						for(int h=0;h<q.size();h++)
						{
							if(i==1||(q[h]&s[i-2])==q[h])
							{
								if(q[j]&q[k]==0&&q[j]&q[h]==0)
								f[i][j][k]=max(f[i][j][k],f[i-1][k][h]+__builtin_popcount(q[j]));
							}
						}
					}
				}
			}
		}
		for(int j=0;j<q.size();j++)
		{
			for(int k=0;k<q.size();k++)
			{
				ans=max(ans,f[n][j][k]);
			}
		}
	}
	cout<<ans;
}
2024/7/24 19:50
加载中...