100悬赏50追加会pac和C的神牛入内~(别用深蓝的我试了不对)

来源:百度知道 编辑:UC知道 时间:2024/07/04 23:06:24
var n,m,i,j,z,s,tmp,ans:longint;
a,b:array[0..12]of longint;
c:array[0..12,0..12]of longint;
procedure dfs(x,y:longint);
var i,j:longint;
begin
if (x>n)then
begin
inc(ans);
exit;
end;
if y>n then
begin
dfs(x+1,x+2);
exit;
end;
if a[x]-b[x]>=3 then
begin
c[x,y]:=3;
c[y,x]:=0;
inc(b[x],3);
dfs(x,y+1);
dec(b[x],3);
end;
if a[y]-b[y]>=3 then
begin
c[x,y]:=0;
c[y,x]:=3;
inc(b[y],3);
dfs(x,y+1);
dec(b[y],3);
end;
if z>0 then
begin
dec(z);
c[x,y]:=1;
c[y,x]:=1;
inc(b[x]);
inc(b[y]);
if (b[x]<=a[x])and(b[y]<=

//可能部分代码有输入错误,先试试,有问题再跟我讲。
#include <stdio.h>
int n,m,i,j,z,s,tmp,ans;
int a[13],b[13];
int c[13][13];
void dfs(int x,int y){
int i,j;
if(x>n) {ans++;return;}
if(y>n) {dfs(x+1,x+2);return;}
if(a[x]-b[x]>=3){
c[x][y]=3;
c[y][x]=0;
b[x]+=3;
dfs(x,y+1);
b[x]-=3;
}
if(a[y]-b[y]>=3){
c[x][y]=0;
c[y][x]=3;
b[y]+=3;
dfs(x,y+1);
b[y]-=3;
}
if(z>0){
z--;
c[x][y]=c[y][x]=1;
b[x]++;b[y]++;
if(b[x]<=a[x]&&b[y]<=a[y]) dfs(x,y+1);
b[x]--;b[y]--;
z++;
}
}
int main(){
scanf("%d",&n);
for (i=1;i<=n;i++) {scanf("%d",&a[i]);s+=a[i];}
z=3*n*(n-1)/2-s;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if(a[i]>a[j]) {tmp=a[i];a[i]=a[j];a[j]=tmp;}
dfs(1,2);
printf("%d\n",ans);
return 0;