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.
题意:矩阵,固定从a[0][0]出发,到达第0行,然后再选择第一行的任意一个,但是你能解出a[i][j]题的条件是你必须做出第a[k][i]题,并且a[k][i]题所花的时间要小于等于第ij题所花的时间
思路:直接DFS了
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[16][16]; int vis[16]; int n,maxn; void dfs(int u,int r,int val) { maxn=max(r,maxn); if(maxn==n) return ; for(int i=1;i<n;i++) { if(vis[i]) continue; if(val<=a[u][i]) { vis[i]=1; dfs(i,r+1,a[u][i]); vis[i]=0; } } } int main() { while(scanf("%d",&n)!=EOF) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) scanf("%d",&a[i][j]); } memset(vis,0,sizeof(vis)); maxn=0; for(i=1;i<n;i++) { vis[i]=1; dfs(i,2,a[0][i]); //因为绝对能做出00题,并且能做出第0行的任意题 //所以直接枚举其他的行了,并且绝对能做出前2题 vis[i]=0; } printf("%d\n",maxn); } return 0; }
原文:http://blog.csdn.net/u012313382/article/details/44627851