#include <bits/stdc++.h>
using namespace std;
#define MAX(a, b) (((a) > (b))?(a):(b))
#define MAXN 15
int data[MAXN+1][MAXN+1]; // data[i][j]:做完第i道题后,做第j道题需要的时间
int visit[MAXN+1];
int n;
int sum; // 已经做了多少题
// p:第p个问题,正在解决
// lasttime:上次做题时间
// count:已经做了多少题
void dfs(int p, int lasttime, int count) {
int i;
sum = MAX(sum, count);
//要不要这个判断都能AC
if(sum == n)
return;
for(i = 1; i < n; i++) {
if(!visit[i] && data[p][i] >= lasttime) {
visit[i] = 1;
dfs(i, data[p][i], count+1);
visit[i] = 0;
}
}
}
int main(void) {
freopen("data.in", "r", stdin);
int i, j;
while(scanf("%d", &n) != EOF) {
// 读入矩阵
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
scanf("%d", &data[i][j]);
// 清零
memset(visit, 0, sizeof(visit));
// 深度优先搜索
sum = 0;
visit[0] = 1;
dfs(0, 0, 1);
// 输出结果
printf("%d\n", sum);
}
return 0;
}
HDU 2614 Beat(DFS)
最新推荐文章于 2021-10-21 18:26:48 发布