1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int fx[4]={3,0,1}; int fy[4]={0,3,1}; int n,a[9],p[9],ans;//p[i]表示i号队的当前得分 void dfs(int x,int y)//x号队和第y号队比赛 { if(p[x]>a[x]||p[x]+(n-y+1)*3<a[x])return;//剪枝:超a[x] 或 下来都赢也达不到a[x] if(x==n){ans++;return;} if(y==n)//和最后一个队伍比赛 { int t=a[x]-p[x];if(t==2||t>3) return;//2分或者3分以上不可能达成 p[x]+=t;p[y]+=(t==1?1:3-t); dfs(x+1,x+2);//下一场比赛 p[x]-=t;p[y]-=(t==1?1:3-t); return ; } for(int i=0;i<=2;i++)//for i=0:赢;1:输;2:平 { p[x]+=fx[i];p[y]+=fy[i]; dfs(x,y+1); p[x]-=fx[i];p[y]-=fy[i]; } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); ans=0;dfs(1,2);//第一场:1号队和2号队比赛 printf("%d\n",ans); return 0; }
- 1
信息
- ID
- 782
- 时间
- 3000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 168
- 已通过
- 59
- 上传者