STUDENT00 @ 2022-09-27 20:47:05
代码很好理解的:
#include<bits/stdc++.h>
using namespace std;
int n,m,a[101],p,dp[101][101][101],ans;
char c[101][11];
void work(){
for(int i=1;i<(1<<n);i++){
if((i&(i<<1))||(i&(i<<2))) continue;
p++;
a[p]=i;
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%s",c[i]+1);
work();
for(int i=1;i<=n;i++){
for(int j=1;j<=p;j++){
int s=0,t=a[j];
while(t){
t&=(t-1);
s++;
}
for(int z=1;z<=p;z++){
if(a[j]&a[z]) continue;
int maxs=0;
for(int k=1;k<=p;k++){
if((a[j]&a[k])||(a[z]&a[k])) continue;
maxs=max(maxs,dp[i][z][k]);
}
dp[i][j][z]=maxs+s;
}
}
}
for(int i=1;i<=p;i++){
for(int j=1;j<=p;j++) ans=max(ans,dp[n][i][j]);
}
printf("%d",ans);
return 0;
}
by 淸梣ling @ 2022-09-27 21:42:08
@YuRuochen 数组开大一点
by STUDENT00 @ 2022-09-27 21:55:36
@淸梣ling dalao,应该不是这个问题吧,毕竟还有WA的呢
by STUDENT00 @ 2022-09-27 21:59:44
@淸梣ling dalao,而且我算了一下,最多只有60种情况(开到100完全完全够)
by STUDENT00 @ 2022-09-27 22:08:50
@淸梣ling dalao,在吗?
by 淸梣ling @ 2022-09-27 22:22:29
@YuRuochen 首先你 dp 数组越界了。至于 WA,我觉得可能是你 line9 有点问题?(我也不太清楚
by 淸梣ling @ 2022-09-27 22:23:12
@YuRuochen 哦,wssb,line10 你写成 n 了
by STUDENT00 @ 2022-09-28 19:21:44
@淸梣ling dalao,对不起,我现在才看到,已经AC了,谢谢大佬!