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