题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2614
方法:就一个很简单的递归深搜,当探寻到一个节点A的时候,表明其可以解答一个题,于是先设置其解答的题目个数是1,然后去以此探寻其子节点,其子节点就是其下一个可以解答的题,可能有多个可以解答的题,于是就用多个子节点,分别递归去计算每一个个子节点下去能接答多少题,去能解答题目数量最多的一个状态子节点的探寻结果和一开始就设置的1相加,得到从该A节点的结果。
感想:简单题
代码:
View Code
#include <iostream> #include <queue> #include<algorithm> using namespace std; int n,m; const int MIN=-0x7fffffff; bool v[15]; int problemRelation[15][15]; int DFSCaculate(int start = 0,int cost =0) { int re = 1; int t_re = 0; v[start] = true; for(int i = 0;i<n;i++) { if(!v[i]) { if(problemRelation[start][i] >= cost) { int x = DFSCaculate(i,problemRelation[start][i]); t_re = x>t_re? x :t_re; } } } v[start] = false; return re+t_re; } void main() { while(scanf("%d",&n)!=EOF) { for(int i =0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&problemRelation[i][j]); cout<<DFSCaculate()<<endl; } }