1 solutions

  • 1
    @ 2025-6-28 21:00:16

    100 Wrong Answer

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,k,dh[1024],dh_sum[1024],dp[110][1024][1024],ans,_map[110];
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=n;i++){
    		char str[103];
    		scanf("%s",str);
    		for(int j=0;j<m;j++)if(str[j]=='H')_map[i]+=1<<j;
    	}
    	//单行初始化
    	for(int i=0;i<=(1<<m)-1;++i)
    		if(((i&(i<<1))==0)&&((i&(i<<2))==0)&&((i&(i>>1))==0)&&((i&(i>>2))==0)){
    			dh[++k]=i;
    			dh_sum[k]=__builtin_popcount(i);
    			if((i&_map[1])==0)dp[1][0][k]=dh_sum[k];
    		}
    	//第二行初始化
    	for(int i=1;i<=k;++i)
    		for(int j=1;j<=k;++j)
    			if(((dh[i]&dh[j])==0)&&((dh[j]&_map[2])==0))dp[2][i][j]=max(dp[2][i][j],dp[1][0][i]+dh_sum[j]);
    	//dp
    	for(int i=3;i<=n;i++)
    		for(int j=1;j<=k;++j)
    			if((_map[i]&dh[j])==0)
    				for(int p=1;p<=k;p++)
    					if((dh[p]&dh[j])==0)
    						for(int q=1;q<=k;q++)
    							if(((dh[q]&dh[p])==0)&&((dh[q]&dh[j])==0))dp[i][p][j]=max(dp[i][p][j],dp[i-1][q][p]+dh_sum[j]);
    	//输出
    	for(int i=1;i<=k;i++)
    		for(int j=1;j<=k;j++)
    			ans=max(dp[n][i][j],ans);
    	cout<<ans;
    	return 0;
    }
    
    • 1

    Information

    ID
    404
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    8
    Tags
    # Submissions
    25
    Accepted
    4
    Uploaded By