#include<bits/stdc++.h>
#define ll long long
#pragma GCC optimize(2)
#define un unsigned
#define db double
#define st string
#define ct const
#define xh(a,b,c) for(int a=b;a<=c;a++)
#define wx while(1)
#define dn(a,b,c) for(int a=b;a>=c;a--)
using namespace std;
int n,maxn;
char a[30][30];
int f[30][30];
int tj(){
	int ans=0;
	xh(i,1,20)xh(j,1,20)ans+=(f[i][j]==2&&a[i][j]=='#');
	return ans;
}
void dfs(int k,int start,int ans,bool flag){
	if(k==n+1){
		maxn=max(maxn,tj());
		return ;
	}
	if(!flag){
		xh(i,start,20){
			xh(j,1,20)f[i][j]++;
			dfs(k+1,i+1,ans,flag);
			dfs(k+1,1,ans,1);
			xh(j,1,20)f[i][j]--;
		}
	}
	else{
		xh(i,start,20){
			xh(j,1,20)f[j][i]++;
			dfs(k+1,i+1,ans,flag);
			xh(j,1,20)f[j][i]--;
		}
	}
}
signed main(){
	cin>>n;
	xh(i,1,20)xh(j,1,20)cin>>a[i][j];
	dfs(1,1,0,0);
	cout<<maxn;
	return 0;
}

1 条评论

  • @ 2025-11-21 18:48:48
    #include<bits/stdc++.h>  
    #define ll long long
    #pragma GCC optimize(2)
    #define un unsigned
    #define db double
    #define st string
    #define ct const
    #define xh(a,b,c) for(int a=b;a<=c;a++)
    #define wx while(1)
    #define dn(a,b,c) for(int a=b;a>=c;a--)
    using namespace std;
    int n,maxn;
    char a[30][30];
    int f[30][30];
    int sum[30];
    void check(int sum[]){
    	sort(sum+1,sum+21);
    	int ans=0;
    	dn(i,20,1){
    		if(i>=20-n+1)break;
    		ans+=sum[i];
    	}
    	maxn=max(maxn,ans);
    }
    void dfs(int k,int start,int ans,bool flag){
    	if(!flag){
    		bool F=0;
    		xh(i,start,20){
    			xh(j,1,20){
    				sum[j]+=(a[i][j]=='W');
    			}
    			check(sum);
    			dfs(k+1);
    			xh(j,1,20)sum[j]-=(a[i][j]=='W');
    		}
    	}
    }
    signed main(){
    	cin>>n;
    	xh(i,1,20)xh(j,1,20)cin>>a[i][j];
    	dfs(1,1,0,0);
    	cout<<maxn;
    	return 0;
    }
    
    • 1

    信息

    ID
    126
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    (无)
    递交数
    83
    已通过
    27
    上传者