hdu 1224

郁闷死啦,一道简单的DP,搞了好几个小时,结果输出错了,反序了,都怪测试例子是三个数,反序了也不知道呀,也怪自己……………………

#include<iostream>
#include<string>
using namespace std;
int p[105],f[105],dp[105],ans[105];
bool map[105][105];
int main()
{
	int a,b,n,m,cas,t=0;
	cin>>cas;
	while(cas--)
	{
		cin>>n;
		for(int i=1;i<=n;i++)
			cin>>p[i];
		p[n+1]=0;
		memset(map,0,sizeof(map));
		memset(dp,0,sizeof(dp));
		cin>>m;
		for(int i=0;i<m;i++)
		{
			cin>>a>>b;
			map[a][b]=1;
		}
		f[1]=-1;
		for(int i=2;i<=n+1;i++)
		{
			for(int j=1;j<i;j++)
				if(map[j][i]&&p[i]+dp[j]>dp[i])
				{
					dp[i]=p[i]+dp[j];
					f[i]=j;
				}
		}
		int k=n+1,i=0;
		while(f[k]!=-1) 
		{
			ans[i++]=f[k];
			k=f[k];
		}
		if(t++) cout<<endl;
		cout<<"CASE "<<t<<"#"<<endl<<"points : "<<dp[n+1]<<endl;
		cout<<"circuit : ";
		for(int j=i-1;j>=0;j--)
			cout<<ans[j]<<"->";
		cout<<1<<endl;
	}
	return 0;

}




		



posted @ 2011-08-10 00:08  枕边梦  阅读(307)  评论(0编辑  收藏  举报