杭电ACM 1224 Free DIY Tour (待解决)


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


你可能感兴趣的:(c,output)