标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5815 Accepted Submission(s): 1855
#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <algorithm> #define N 105 using namespace std; int dp[N]; ///dp[i]表示前i个城市能够获得的最大权值 int mp[N][N]; int v[N]; int pre[N]; int path[N]; int main() { int tcase; scanf("%d",&tcase); int cnt = 1; while(tcase--){ int n,m; scanf("%d",&n); memset(dp,0,sizeof(dp)); memset(mp,0,sizeof(mp)); for(int i=1;i<=n;i++){ scanf("%d",&v[i]); } v[n+1]=0;///不要忘了,会WA scanf("%d",&m); int a,b; for(int i=1;i<=m;i++){ scanf("%d%d",&a,&b); mp[a][b]=1; } for(int i=1;i<=n+1;i++){ for(int j=1;j<i;j++){ if(mp[j][i]==1){ if(dp[i]<dp[j]+v[i]){ dp[i]=dp[j]+v[i]; pre[i]=j; } } } } printf("CASE %d#\npoints : %d\n",cnt++,dp[n+1]); int t = n+1; int k=0; while(t!=1){ path[++k] = pre[t]; t=pre[t]; } printf("circuit : "); for(int i=k;i>=1;i--)printf("%d->",path[i]); printf("1\n"); if(tcase) printf("\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/liyinggang/p/5418705.html