Output Limit Exceeded
#include <iostream>
using namespace std;
int map[110][110];
int point[110];
int dp[110];
int dp_max[110];//dp_max[i]表示i-->j中dp[j]最大的数
int next[110];//标记下一步
int main()
{
int T;
cin>>T;
for(int c=1;c<=T;c++){
int N;
cin>>N;
memset(dp,0,sizeof(dp));
for(int k=0;k<=110;k++)
dp_max[k]=-100;
memset(map,0,sizeof(map));
memset(point,0,sizeof(point));
memset(next,0,sizeof(next));
for(int i=1;i<=N;i++)
cin>>point[i];
int N_map;
cin>>N_map;
for(int i=1;i<=N_map;i++){
int x,y;
cin>>x>>y;
map[x][y]=1;
}
dp[N+1]=0;
int flag;//标记路径
int i,j;
for(i=N;i>=1;i--){
flag=-1;
//一个循环解决一个dp[i]
for(j=i+1;j<=N+1;j++){
if(map[i][j]==1){
if(dp[j]>dp_max[i])
{
dp_max[i]=dp[j];
flag=j;
}
dp[i]=point[i]+dp_max[i];
}
}
if(flag>0)
next[i]=flag;
}
cout<<"CASE "<<c<<"#"<<endl;
cout<<"points : "<<dp[1]<<endl;
cout<<"circuit : ";
cout<<"1";
int a=1;
while(next[a]!=N+1){
cout<<"->"<<next[a];
a=next[a];
}
cout<<"->"<<"1"<<endl;
if(c!=T) cout<<endl;
}
return 0;
}