标签:
问题链接:HDU2614 Beat。
本题可以用深度优先搜索。
根据提示,总是先做第0道题。然后,需要保证题越做越难。
其他解释都写在注释中了。
/* HDU2614 Beat */ #include <stdio.h> #include <memory.h> #define MAX(a, b) (((a) > (b))?(a):(b)) #define MAXN 15 int time[MAXN+1][MAXN+1]; // time[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); if(sum == n) return; for(i=1; i<n; i++) { if(!visit[i] && time[p][i] >= lasttime) { visit[i] = 1; dfs(i, time[p][i], count+1); visit[i] = 0; } } } int main(void) { int i, j; while(scanf("%d", &n) != EOF) { // 读入矩阵 for(i=0; i<n; i++) for(j=0; j<n; j++) scanf("%d", &time[i][j]); // 清零 memset(visit, 0, sizeof(visit)); // 深度优先搜索 sum = 0; visit[0] = 1; dfs(0, 0, 1); // 输出结果 printf("%d\n", sum); } return 0; }
标签:
原文地址:http://blog.csdn.net/tigerisland45/article/details/51885643