HOJ 2614 Beat

本题使用dfs即可

#include
#include
#pragma(disable: 4996)
using namespace std;
const int N = 15;
int a[N][N], solve[N], t, num, m;
//a为题中给定数组
//solve为题目的状态,0表示未解决,1表示解决
//t为给出的问题数目
//num为检索过程中的“已解决数目”
//m为最大可解数目

void dfs(int k, int cost) {
	for (int i = 0; i < t; i++) {
		if (a[k][i] >= cost && solve[i] == 0)
			break;//如果存在可以“继续解决”的下一个问题,则结束循环,去“解决”这个问题
		if (i == t - 1 && (a[k][i] < cost || solve[i] == 1)) {
			if (num > m)//经过检索发现以经没有可以“继续解决”的问题了,则判断当前解决的问题数目是否为最多
				m = num;
			return;
		}
	}
	
	for (int i = 0; i < t; i++) 
		if (a[k][i] >= cost && solve[i] == 0) {
			solve[i] = 1;
			num++;
			dfs(i, a[k][i]);
			solve[i] = 0;
			num--;
		}
}


int main() {
	while (cin >> t) {
		m = 1;
		num = 1;
		memset(solve, 0, sizeof(solve));
		for (int i = 0; i < t; i++)
			for (int j = 0; j < t; j++)
				scanf("%d", &a[i][j]);
		solve[0] = 1;
		dfs(0 ,0);
		cout << m << endl;
	}
	return 0;
}

你可能感兴趣的:(dfs)