题目大意:有A,B,C,D四个队伍,两两之间有一个比赛,假如A和B比赛,如果平局,各加一分,如果说A胜,给A加3分,不给B加分,B胜同理
给出A,B,C,D,的得分,判断形成这种局面有多少种方式。
思路 DFS,,枚举每3种情况,赢输平局。
#include<bits/stdc++.h> using namespace std; int d[10][3]={{1,2},{1,3},{1,4},{2,3},{2,4},{3,4}}; int t[10][10][10][10] ; int arr[100+10]; void dfs(int x){ if(x==6) { t[arr[1]][arr[2]][arr[3]][arr[4]]++; return ; } for(int i=1;i<=3;i++){ if(i==1){ arr[d[x][0]]++; arr[d[x][1]]++; dfs(x+1); arr[d[x][0]]--; arr[d[x][1]]--; } else if(i==2){ arr[d[x][0]]+=3; dfs(x+1); arr[d[x][0]]-=3; } else { arr[d[x][1]]+=3; dfs(x+1); arr[d[x][1]]-=3; } } } void solve(int xx){ int a,b,c,d; cin>>a>>b>>c>>d; printf("Case #%d: ",xx); if(a>=10||b>=10||c>=10||d>=10) puts("Wrong Scoreboard"); else if(t[a][b][c][d]==1) puts("Yes"); else if(t[a][b][c][d]==0) puts("Wrong Scoreboard"); else puts("No"); } int main(){ dfs(0); int t; cin>>t; for(int i=1;i<=t;i++) solve(i); return 0; }