回复 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;
}
