题目描述
学校放寒假时,信息学奥赛辅导老师有1,2,3,⋯,x 本书,要分给参加培训的 x 个人,每人只能选一本书,但是每人有两本喜欢的书。
老师事先让每个人将自己喜欢的书填写在一张表上。然后根据他们填写的表来分配书本,希望设计一个程序帮助老师求出所有可能的分配方案,使每个学生都满意。
输入格式
第 11 行一个数 x。
第 22 行至第 1+x 行,每行两个数,表示 ai 喜欢的书的序号。
输出格式
只有一个数,总方案数 total。
输入输出样例
输入 #1
5 1 3 4 5 2 5 1 4 3 5输出 #1
2
题目难度:
普及/提高-
参考代码:
#include <bits/stdc++.h>
using namespace std;
int T,n,m,a[10][10],ans,b[100][100];
void DFS(int x,int y,int z)
{
if(x>n)
{
ans=max(ans,z);
return ;
}
int xx=x,yy=y+1;
if(yy>m)
{
xx++;
yy=1;
}
if(!b[x-1][y]&&!b[x][y-1]&&!b[x-1][y-1]&&!b[x-1][y+1])
{
b[x][y]=1;
DFS(xx,yy,z+a[x][y]);
b[x][y]=0;
}
DFS(xx,yy,z);
}
int main()
{
int T;
cin>>T;
while(T--)
{
ans=0;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
DFS(1,0,0);
cout<<ans<<endl;
}
return 0;
}
917

被折叠的 条评论
为什么被折叠?



