吾王美如画 @ 2018-12-03 23:30:41
评测记录
代码
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int cnt=0;
int sit[1<<10],sum[1<<10],map[101],n,m;
int dp[101][1<<10][1<<10];
void ycl(int p,int last,int s){
if (p>=m){cnt++;
sit[cnt]=last;
sum[cnt]=s;
return;
}
ycl(p+3,last+(1<<p),s+1);
ycl(p+2,last,s);
ycl(p+1,last,s);
}
int main() {
cin>>n>>m;
getchar();
memset(map,0,sizeof(map));
for(int i=1;i<=n;i++){
char c[20];
gets(c);
for(int j=0;c[j]!='\n';j++){
if (c[i]=='H')map[i]+=1<<j;
}
}
ycl(0,0,0);
for(int i=1;i<=cnt;i++){
if (sit[i]&map[1]) continue;
dp[1][i][0]=sum[i];
}
for(int i=1;i<=cnt;i++){
if (sit[i]&map[2]) continue;
for(int j=1;j<=cnt;j++){
if (sit[i]&sit[j])continue;
dp[2][i][j]=max(dp[2][i][j],dp[1][j][0]+sum[i]);
}
}
for(int i=3;i<=n;i++){
for(int j=1;j<=cnt;j++){
if(sit[j]&map[i]) continue;
for(int k=1;k<=cnt;k++){
if (sit[j]&sit[k])continue;
for(int l=1;l<=cnt;l++){
if (sit[j]&sit[l])continue;
if (sit[k]&sit[l])continue;
dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][l]+sum[j]);
}
}
}
}
int ans=-1;
for(int i=1;i<=cnt;i++){
for(int j=1;j<=cnt;j++){
ans=max(ans,dp[n][i][j]);
}
}
cout<<ans;
return 0;
}
orz,求大佬帮忙看看
by pjykk @ 2018-12-04 07:25:06
@吾王美如画 gets()不读回车的
by pjykk @ 2018-12-04 07:37:48
然而直接改变成了1AC1WA8TLE,当我什么都没说
by pjykk @ 2018-12-04 07:38:11
建议:使用scanf或cin
by 吾王美如画 @ 2018-12-04 12:32:48
@pjykk 但洛谷用行末空格啊,用cin会多个空格