社区讨论
MLE30求条
P2704[NOI2001] 炮兵阵地参与者 5已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @mlhcfm2j
- 此快照首次捕获于
- 2026/02/11 09:20 上周
- 此快照最后确认于
- 2026/02/12 19:40 7 天前
CPP
#include<bits/stdc++.h>
#define I_don_t_want_to_AFO int main()
#define I_want_to_study_OI_forever return 0;
using namespace std;
int n,m;
int v[105];
int f[103][1<<10][1<<10],cnt[1<<10];
/*
f[i][j][k]表示前i行i状态为j,i-1状态为 k
f[0][0][0]=1;
f[i][j][k]=max(f[i][j][k],f[i-1][k][l]+cnt[i]);
1.jk不同,kl不同,jl不同
2.i,j,k在v内
*/
int su(int x){
int sum=0;
while(x){
sum+=x&1;
x=x>>1;
}
return sum;
}
bool check(int i){
return ((i&(i>>1))==0)&&((i&(i>>2))==0);
}
I_don_t_want_to_AFO{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=0;j<m;j++){
char p;
cin>>p;
v[i]+=((p=='P'?1:0)<<j);
}
}
for(int i=0;i<(1<<m);i++){
cnt[i]=su(i);
}
f[0][0][0]=0;
for(int i=1;i<=n+2;i++){
for(int j=0;j<(1<<m);j++){
if((j&v[i])!=j)continue;
if(!check(j))continue;
for(int k=0;k<(1<<m);k++){
if((k&v[i-1])!=k)continue;
if(!check(k))continue;
for(int l=0;l<(1<<m);l++){
if((l&v[i-2])!=l)continue;
if((j&k)||(j&l)||(k&l))continue;
if(!check(l))continue;
f[i][j][k]=f[i-1][k][l]+cnt[j];
}
}
}
}
cout<<f[n+2][0][0];
I_want_to_study_OI_forever
}
rt,提交记录如下
https://www.luogu.com.cn/record/262429885
回复
共 11 条回复,欢迎继续交流。
正在加载回复...