初始化的时候不能
if(a[1]==0) { dp[1][1][0][0]=0; } else if(a[1]==1) { dp[1][0][1][1]=0; } else if(a[1]==2) { dp[1][0][0][2]=0; }
要
dp[1][1][0][0]=cnt[1][0]-1; dp[1][0][1][1]=cnt[1][1]-1; dp[1][0][0][2]=cnt[1][2]-1;
因为你不能只给一种状态附初始值,否则后面状态转移会漏掉剩下两种状态的第一个值。