下载样例自己跑对了,洛谷上过不了

P2704 [NOI2001] 炮兵阵地

tangfanhao @ 2024-10-04 16:32:06

#include<bits/stdc++.h>
using namespace std;
int sum[2005],a[105],v[105][105],tot[105],dp[105][105][105],n,m,ans;
int main(){
    n=0;
    m=0;
    scanf("%d%d",&n,&m);
    getchar();
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            char sl;
            sl=getchar();
            if(sl=='H'){
                a[i]=a[i] << 1;
                a[i]+=1;
            }else{
                a[i]=a[i] << 1;
            }
        }
        getchar();
    }
    for(int i=1;i<=n;i++){
        for(int j=0;j<(1 << m);j++){
            if(((j&a[i])==0)&&((j&(j << 1))==0)&&((j&(j << 2))==0)&&((j&(j >> 1))==0)&&((j&(j >> 2))==0)){
                v[i][++tot[i]]=j;
            }
            sum[j]=sum[j >> 1]+(j & 1);
        }
    }
    for(int i=1;i<=tot[1];i++){
        dp[1][i][0]=sum[v[1][i]];
    }
    for(int i=1;i<=tot[2];i++){
        for(int j=1;j<=tot[1];j++){
            if((v[2][i]&v[1][j])==0){
                dp[2][i][j]=sum[v[2][i]]+sum[v[1][j]];
            }
        }
    }
    if(n==1){
        for(int i=1;i<=tot[1];i++){
            ans=max(ans,dp[1][i][0]);
        }
        cout<<ans;
        return 0;
    }
    for(int i=3;i<=n;i++){
        for(int j=1;j<=tot[i];j++){
            int s=v[i][j];
            if((s&a[i])!=0){
                continue ;
            }
            for(int k=1;k<=tot[i-1];k++){
                int l=v[i-1][k];
                if((s & l)==0&&(l&a[i-1])==0){
                    for(int op=1;op<=tot[i-2];op++){
                        int ll=v[i-2][op];
                        if((ll&a[i-2])==0&&(l & ll)==0&&(s & ll)==0){
                            dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][op]+sum[s]);
                        }
                    }
                }
            }
        }
    }
    for(int j=1;j<=tot[n];j++){
        for(int k=1;k<=tot[n-1];k++){
            ans=max(ans,dp[n][j][k]);
        }
    }
    cout<<ans;
    return 0;
}

记录 wa#1,就是样例


by tangfanhao @ 2024-10-04 16:32:46

90pts


by wallace_QwQ @ 2024-11-01 23:32:30

关O2试一下 @tangfanhao


|