HDU2614 Beat

来源:互联网 发布:淘宝直通车品牌资质 编辑:程序博客网 时间:2024/05/17 08:28

问题链接:HDU2614 Beat。

本题可以使用深度优先搜索求解。

根据提示,总是先做第0道题。然后,需要保证题越做越难。

其他解释都写在注释中了。

AC程序如下:

/* HDU2614 Beat */#include <stdio.h>#include <memory.h>#define MAX(a, b) (((a) > (b))?(a):(b))#define MAXN 15int 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;}


1 0