_YPC @ 2018-10-29 15:41:01
这道题目我第一个点WA了,但是各位想想,这题目的第一个点就是样例,我怎么可能样例没过就提交啊……而且我自己也把这个这点下载下来测过了,Van♂全没有问题啊……
这个是数据:
Sample Input:
5 4
PHPP
PPHH
PPPP
PHPP
PHHP
Sample Output:
6
然后这个是代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=106,maxs=(1<<10)+6;
int f[2][maxs][maxs],n,tot[maxn],sta[maxn][maxs],m,ans;
inline void get_status(int x,int t){
for (int i=0;i<(1<<m);i++){
if ((i&t)||(i&(i<<1))||(i&(i<<2)))continue;
sta[x][++tot[x]]=i;
}
}
inline int get_one(int x){
int ret=0;
while (x)ret=ret+x%2,x>>=1;
return ret;
}
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
getchar();
int t=0;
for (int j=1;j<=m;j++){
char ch=getchar();
if (ch=='P')t=(t<<1);else t=(t<<1)+1;
}
get_status(i,t);
}
sta[0][tot[0]=1]=0;
for (int i=1;i<=tot[1];i++)f[1][i][1]=get_one(sta[1][i]);
for (int i=2;i<=n;i++)
for (int j=1;j<=tot[i];j++)
for (int k=1;k<=tot[i-1];k++){
if (sta[i][j]&sta[i-1][k])continue;
for (int a=1;a<=tot[i-2];a++){
if ((sta[i][j]&sta[i-2][a])||(sta[i-1][k]&sta[i-2][a]))continue;
f[i&1][j][k]=max(f[i&1][j][k],f[(i-1)&1][k][a]+get_one(sta[i][j]));
}
}
for (int i=1;i<=n;i++)
for (int j=1;j<=tot[i];j++)
for (int k=1;k<=tot[i-1];k++)ans=max(ans,f[i&1][j][k]);
printf("%d\n",ans);
return 0;
}
这个点我在洛谷上测出来的是5,但是本地跑就是6……(各位可以把我的代码拷贝下来自己测一下qwq)
非常难受啊,求巨佬解答QAQ。
by jeffqi @ 2018-10-29 17:50:10
@_YPC 我本地上测也是6
by _YPC @ 2018-11-02 16:17:40
@jeffyang QAQ
by fxhfxh55555 @ 2018-11-20 23:29:44
linux的锅吧。。。getchar换成手写快读试试=。=
by 白格Lifeplayer @ 2019-10-26 23:37:53
我也是,只有第一个样例点WA了,其他全A了QAQ