3 0 0 0 1 0 1 1 0 0 3 0 2 2 1 0 1 1 1 0 5 0 1 2 3 1 0 0 2 3 1 0 0 0 3 1 0 0 0 0 2 0 0 0 0 0
3 2 4HintHint: sample one, as we know zty always solve problem 0 by costing 0 minute. So after solving problem 0, he can choose problem 1 and problem 2, because T01 >=0 and T02>=0. But if zty chooses to solve problem 1, he can not solve problem 2, because T12 < T01. So zty can choose solve the problem 2 second, than solve the problem 1.
#include<stdio.h> #include<string.h> #define max(a,b) (a>b?a:b) int map[1010][1010],vis[1010]; int ans,n; void dfs(int i,int len,int num) { ans=max(ans,len); if(len==n) return; for(int j=0;j<n;j++) { if(!vis[j]&&j!=i) { if(map[i][j]>=num) { vis[j]=1; dfs(j,len+1,map[i][j]); vis[j]=0; } } } } int main() { //int n; while(scanf("%d",&n)!=EOF) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) scanf("%d",&map[i][j]); } memset(vis,0,sizeof(vis)); vis[0]=1; ans=-1; for(i=1;i<n;i++) { vis[i]=1; dfs(i,2,map[0][i]); vis[i]=0; } printf("%d\n",ans); } }
原文:http://blog.csdn.net/yu_ch_sh/article/details/44658283