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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值