回复 9楼 b465513006
呵呵。。。你是对的,但是我昨天提交了一下,显示是超时的,可能递归比较耗时,你能再给个优化的代码吗
回复 8楼 beyondyf
呵呵。。。你是对的,但是我昨天提交了一下,显示是超时的,可能递归比较耗时,你能再给个优化的代码吗
#include <stdio.h> #define MAX_NODES 30 int RP[MAX_NODES + 2]; int MAP[MAX_NODES + 2]; int Cal(int n) { int ns1 = 0, ns2 = 1,ns[32] = {0}, ps[32] = {1}; int i, j, k; n++; while(ns1 != ns2) { ns1 = ns2; for(i = 0; i <= n; i++) { if(ns2 & (1 << i)) for(j = 0; j <= n; j++) { k = 1 << j; if(MAP[i] & k && !(ps[i] & k) && ns[j] < ns[i] + RP[j]) { ns2 |= k; ns[j] = ns[i] + RP[j]; ps[j] = ps[i] + k; } } } } return ns[n]; } int main() { int i, n, m, f, t; scanf("%d%d", &n, &m); for(i = 1; i <= n; i++) scanf("%d", RP + i); for(i = 0; i < m; i++) { scanf("%d%d", &f, &t); MAP[f] |= 1 << t; } printf("%d\n", Cal(n)); return 0; }