qwq,整不明白了
#include<bits/stdc++.h>
using namespace std;const int mod=1e6;
int dp[2][40][40][40][5][5],a[10],now,b[10],n,ans;
bool check(int x,int y,int z){
if((x&1)==(y&1)&&(y&1)==(z&1))return 0;
if((x&2)==(y&2)&&(y&2)==(z&2))return 0;
return 1;
}
int main(){
cin>>a[1]>>a[2]>>a[3]>>a[4];n=a[1]+a[2]+a[3]+a[4];
for(int i=0;i<=3;i++){
for(int j=0;j<=3;j++){
for(int k=0;k<=3;k++)b[k]=0;
b[i]++;b[j]++;
dp[0][b[0]][b[1]][b[2]][i][j]=1;
}
}
for(int i=3;i<=n;i++){
now^=1;
memset(dp[now],0,sizeof(dp[now]));
for(int a1=0;a1<=a[1];a1++){
for(int a2=0;a2<=a[2];a2++){
for(int b1=0;b1<=a[3];b1++){
int b2=i-a1-a2-b1-1;if(b2<0||b2>a[4])continue;
for(int j=0;j<=3;j++){
for(int k=0;k<=3;k++){
int num=dp[now^1][a1][a2][b1][j][k];if(!num)continue;
if(check(j,k,0))dp[now][a1+1][a2][b1][k][0]+=num,dp[now][a1+1][a2][b1][k][0]%=mod;
if(check(j,k,1))dp[now][a1][a2+1][b1][k][1]+=num,dp[now][a1][a2+1][b1][k][1]%=mod;
if(check(j,k,2))dp[now][a1][a2][b1+1][k][2]+=num,dp[now][a1][a2][b1+1][k][2]%=mod;
if(check(j,k,3))dp[now][a1][a2][b1][k][3]+=num,dp[now][a1][a2][b1][k][3]%=mod;
}
}
}
}
}
}
for(int i=0;i<=3;i++)for(int j=0;j<=3;j++)ans+=dp[now][a[1]][a[2]][a[3]][i][j];if(ans>=mod)ans-=mod;
cout<<ans;
}